בדף הזה מוסבר איך להפעיל קבוצה של תכונות להאצת קלט/פלט ב-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 משתמש בקריאות של נתונים בזמן אמת, שמשפרות את הביצועים של סריקות רציפות, 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_unsafeconfiguration.
הגדרת תכונות להאצת קלט/פלט ב-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:17
מחליפים את הפרטים הבאים:
-
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 17 מכיל נתיבים שמבצעים קלט/פלט של בלוק יחיד, מה שגורם להאטה.
O_DIRECTיכול להיות שקריאות יהיו איטיות יותר במהלך שחזור מסד נתונים (נתיב חוזר), סריקות של ניקוי מסד הנתונים וחימום מראש של מטמון הדיסק של Omni. - תכונות ההאצה של קלט/פלט ב-AlloyDB Omni בעותקי קריאה לא נתמכות בגרסת טרום-השקה.
- במערכות מבוססות ARM, יכול להיות שהביצועים יהיו נמוכים יותר בעומסי עבודה כבדים בגלל הבדלים בארכיטקטורה.
- בגלל המגבלות שלו בעומסי עבודה מוגברים,
libaioחשוף לבעיות של חוסר זמינות של משאבים.io_uringעלולות לחוות בעיות בהקצאת זיכרון כשהזיכרון הזמין במערכת נמוך.