בדף הזה מוסבר איך להפעיל קבוצה של תכונות להאצת קלט/פלט ב-AlloyDB Omni, שיכולות לעזור לכם לשפר את השימוש במשאבי החישוב והקלט/פלט כדי להריץ עומסי עבודה מהר יותר ולשפר את הביצועים של שאילתות.
התכונות הבאות כלולות:
- הגנה מפני כתיבה שנפרצה
- התמיכה של
O_DIRECT - קלט/פלט אסינכרוני (AIO)
- קריאה בסטרימינג
כדי להפעיל את תכונות ההאצה של קלט/פלט, צריך להפעיל את alloydb_omni_atomic
Grand Unified Configuration (GUC) ולהגדיר את AlloyDB Omni כך שיוכל להשתמש ב-GUC.
תכונות להאצת קלט/פלט
בקטעים הבאים מוסבר על תכונות ההאצה של קלט/פלט שמופעלות על ידי alloydb_omni_atomic GUC.
הגנה מפני כתיבה שנפרצה
כשמפעילים את ההגדרה alloydb_omni_atomic, משביתים את הכתיבה של דפים מלאים כדי למנוע את התקורה של הביצועים שנובעת מהצורך ליצור תמונות של דפים מלאים לצורך רישום ביומן.
תמיכה ב-O_DIRECT
תמיכה ב-O_DIRECT היא תנאי מוקדם לכתיבות אטומיות. O_DIRECT חל על ספריית הנתונים של PostgreSQL ועל מטמון הדיסק של AlloyDB Omni. מידע נוסף זמין במאמר שיפור הביצועים של מסד נתונים באמצעות מטמון דיסק.
O_DIRECT מציע גם את היתרונות הבאים:
- השימוש בפונקציה
O_DIRECTמאפשר לכם להימנע מבעיית ה-double-buffering ב-PostgreSQL. PostgreSQL מנהל את מטמון המאגרים שלו ויכול לעקוף את מטמון המאגרים של ליבת מערכת ההפעלה. O_DIRECTמפחית את התקורה של המעבד והזיכרון של המערכת שנדרשים לתחזוקת מטמון מאגר הנתונים הזמני של הליבה.
קלט/פלט אסינכרוני
ההגדרה alloydb_omni_atomic מספקת יכולות של קלט/פלט אסינכרוני (AIO) באמצעות הספריות io_uring ו-libaio. מומלץ להשתמש ב-io_uring כדי להימנע מהמגבלות של ספריית libaio הישנה.
אם לא מזוהה תמיכה ב-io_uring, AlloyDB Omni חוזר ל-libaio. הגישה הזו מאפשרת להתגבר על אובדן היתרונות של קלט/פלט (I/O) בזיכרון מטמון, כמו קריאה מראש ושילוב כתיבה, והיא גם מבטיחה ניצול מקסימלי של רוחב הפס הזמין של הקלט/פלט באחסון הבסיסי המוצע.
קריאה בסטרימינג
AlloyDB Omni משתמש בקריאות סטרימינג, בדומה לתכונה של PostgreSQL 17, שמספקות סריקות רציפות משופרות, ANALYZE וביצועים של pg_prewarm באמצעות קלט/פלט וקטורי כדי לקרוא כמה בלוקים למטמון של המאגר. Vectored I/O היא שיטה שבה קריאה לפרוצדורה יחידה יכולה לאחזר מראש נתונים מכמה מאגרי נתונים זמניים, וכך לשפר את היעילות על ידי צמצום מעברים בין הקשרים וקריאות למערכת.
AlloyDB Omni מרחיב את התמיכה לשימוש בקריאות של נתונים בזמן אמת לקריאות ממטמון הדיסק של AlloyDB Omni באמצעות AIO כדי לשפר את ביצועי הקריאה. הגישה הזו מאפשרת לקרוא מראש את מאגרי הנתונים הזמניים לתוך מאגר הזיכרון המשותף מהאחסון כדי להשתמש בהם בשאילתות, במקום לקרוא את הבלוקים האלה מהאחסון בכל פעם שצריך אותם.
לפני שמתחילים
בודקים את התמיכה במערכת ההפעלה ובמערכת הקבצים.
כדי לוודא שהליבה תומכת ב-
RWF_ATOMIC, צריך לבדוק את גרסת הליבה. בדוגמה הבאה, משתמשים במכונת Ubuntu 24.10 שמריצה את ליבת Linux 6.14 שתומכת בכתיבות אטומיות.> sudo hostnamectl ... Operating System: Ubuntu 24.10 Kernel: Linux 6.14.0-061400rc5-generic ...אם הליבה שלכם לא תומכת ב-
RWF_ATOMIC, מומלץ לעדכן לגרסת ליבה שתומכת ב-RWF_ATOMIC.
כדי להשתמש בתכונות של AlloyDB Omni להאצת קלט/פלט כדי לבדוק את שיפורי הביצועים עם הגנה מפני כתיבה קרועה, צריך להפעיל את
alloydb_omni_atomicGrand Unification Configuration (GUC). כדי להשתמש ב-GUC הזה, צריך ליבה ומערכת קבצים תומכות שמספקות קלט/פלט אטומי ומגנות מפני כתיבות קרועות.הדגל
RWF_ATOMICמשמש לתמיכה בכתיבה אטומית. כברירת מחדל, התאימות ל-RWF_ATOMICנבדקת במהלך ההפעלה. ההפעלה של PostgreSQL תיכשל אם לא תהיה אפשרות לאשר כתיבות אטומיות עם הסימוןRWF_ATOMIC.אפשר לשנות את התנהגות ברירת המחדל הזו, אבל מומלץ להשתמש בפלטפורמה נתמכת ובאפשרות
forceכדי להימנע משינוי לא מכוון של הגדרות אופטימליות.אפשר לעקוף את
RWF_ATOMICבדיקת התאימות באמצעות האפשרותforce_unsafe, אבל אין ערובה לאבטחת הנתונים במקרה כזה. מומלץ לא להשתמש באפשרות הזו אלא אם אתם מעריכים את AlloyDB Omni בסביבה שלא ניתן לשדרג אותה כדי להשתמש בקרנל ובמערכת הקבצים המתאימים.בטבלה הבאה מפורטות
alloydb_omni_atomicהגדרות התצורה ובדיקות התאימות המתאימות.ערך alloydb_omni_atomicבדיקת תאימות להפעלה תיאור off
לא רלוונטי הערך הזה משבית את המצב האטומרי. התכונה לא פעילה. force
מבצע בדיקת תאימות בזמן ההפעלה. ההפעלה נכשלת אם הכתיבה של RWF_ATOMICנכשלת.הגדרת תצורות של מצב אטומי. force_unsafe
לא מתבצעת בדיקת תאימות בזמן ההפעלה. מחזירה אזהרה, אבל ממשיכה אם הכתיבה של RWF_ATOMICנכשלת.הגדרת תצורות של מצב אטומי. בהגדרת התצורה של
force/force_unsafe, ההגדרות שלfull_page_writes,io_combine_limitו-debug_io_directמוגדרות באופן אוטומטי. אפשר לשנות את ההגדרות האלה באמצעות ההגדרה האופציונליתon/on_unsafe.
הגדרת תכונות להאצת קלט/פלט ב-AlloyDB Omni
מגדירים את מערכת הקבצים XFS לספריית הנתונים. משתמשים ב-XFS כי היא תומכת בגודל בלוק של מערכת קבצים שגדול מגודל הדף. AlloyDB Omni יכול להשתמש ב-XFS כדי לכתוב בלוקים של 8KiB באופן אטומי עם
RWF_ATOMICתמיכה מלאה.יוצרים מערכת קבצים XFS עם גודל בלוק של 8KiB ומעלים אותה במיקום של ספריית הנתונים (
DATA_DIR).sudo mkfs.xfs -f -b size=8k /dev/$DEVICE sudo mount /dev/$DEVICE DATA_DIR
מחליפים את הפרטים הבאים:
-
DATA_DIR: המיקום של ספריית הנתונים.
-
בודקים את יומני הליבה כדי לוודא שנעשה שימוש בבלוקים של 8k:
> sudo journalctl -f ... kernel: XFS (sdc): EXPERIMENTAL large block size feature enabled. Use at your own risk! kernel: XFS (sdc): Mounting V5 Filesystem 350aa26a-7555-4566-94c1-74e54ddc9250 ...
אופציונלי: מגדירים את מטמון הדיסק של AlloyDB Omni.
כדי ליצור מערכת קבצים באמצעות
ext4,ואז לטעון את מערכת הקבצים, משתמשים בדוגמה הבאה.sudo /sbin/mkfs.ext4 -m 1 -F -E lazy_itable_init=0,lazy_journal_init=0 /dev/DEVICE sudo mount --make-shared -o noatime,discard,errors=panic /dev/DEVICE /OMNI_DISK_CACHE_DIRECTORY
מחליפים את הפרטים הבאים:
-
DEVICE: הישות שהאפליקציה מקיימת איתה אינטראקציה כדי לבצע פעולות קלט/פלט (קריאה או כתיבה של נתונים).
כדי לתמוך בביצועים אופטימליים של תכונות ההאצה של קלט/פלט ב-AlloyDB Omni, כשאין אפשרות להשיג יותר פעולות קלט/פלט בשנייה (IOPS) באחסון הראשי, מומלץ להגדיר מטמון דיסק של AlloyDB Omni. מידע נוסף זמין במאמר שיפור הביצועים של מסד נתונים באמצעות מטמון דיסק.
-
מורידים ומפעילים את AlloyDB Omni.
- מורידים את קובץ ה-Docker העדכני של AlloyDB Omni. מידע נוסף זמין במאמר התקנת AlloyDB Omni במכונה וירטואלית.
- כדי להשתמש במטמון הדיסק, פועלים לפי ההוראות במאמר בנושא שיפור ביצועי מסד הנתונים באמצעות מטמון הדיסק.
כדי לאפשר את
io_uring, מוסיפים ארגומנט נוסף,--security-opts="seccomp:unconfined"docker run -d --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=NEW_PASSWORD \ -v DATA_DIR:/var/lib/postgresql/data \ -v /OMNI_DISK_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER \ # Only if disk cache is enabled -p HOST_PORT:5432 \ --security-opts="seccomp:unconfined" \ --restart=always \ google/alloydbomni:16
מחליפים את הפרטים הבאים:
-
CONTAINER_NAME: השם של מאגר AlloyDB Omni במאגר התמונות של המארח. -
NEW_PASSWORD: הסיסמה שהוקצתה למשתמש PostgreSQL של הקונטיינר. -
DATA_DIR: המיקום של ספריית הנתונים. -
CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: הנתיב לספריית מטמון הדיסק בתוך הקונטיינר. -
HOST_PORT: פורט ה-TCP במחשב המארח שאליו הקונטיינר צריך לפרסם את הפורט שלו 5432.
-
הגדרה של AlloyDB Omni לשימוש בקלט/פלט אטומי.
מגדירים את
alloydb_omni_atomicGUC לערך מתאים ומפעילים מחדש את הקונטיינר.alter system set alloydb_omni_atomic='force'; sudo docker restart CONTAINER_NAME;
מחליפים את הפרטים הבאים:
-
CONTAINER_NAME: השם של מאגר AlloyDB Omni במאגר התמונות של המארח.
-
מגבלות
- PostgreSQL 16 מכיל נתיבים שמבצעים קלט/פלט של בלוק יחיד, מה שגורם ל
O_DIRECTלהאטה. יכול להיות שקריאות יהיו איטיות יותר במהלך שחזור מסד נתונים (נתיב חוזר), סריקות של ניקוי מסד הנתונים וחימום מראש של מטמון הדיסק של Omni. - תכונות האצה של קלט/פלט ב-AlloyDB Omni בעותקי קריאה לא נתמכות בגרסת טרום-השקה.
- במערכות מבוססות ARM, יכול להיות שהביצועים יהיו נמוכים יותר בעומסי עבודה כבדים בגלל הבדלים בארכיטקטורה.
- בגלל המגבלות שלו בעומסי עבודה מוגברים,
libaioחשוף לאי-זמינות של משאבים.io_uringעלולות לחוות בעיות בהקצאת זיכרון כשהזיכרון הזמין במערכת נמוך.