הגדרת מנוע מבוסס-עמודות ב-AlloyDB Omni

בחירת גרסה של מאמר העזרה:

בדף הזה מוסבר איך להפעיל או להשבית את המנוע מבוסס-העמודות באשכול מסד נתונים של AlloyDB Omni. בנוסף, מוסבר איך להגדיר גודל ראשוני מתאים לחנות העמודות.

סקירה כללית של מנוע מבוסס-העמודות של AlloyDB Omni מופיעה במאמר סקירה כללית של מנוע מבוסס-העמודות של AlloyDB Omni.

הפעלת מנוע מבוסס-עמודות

כדי להשתמש במנוע מבוסס-עמודות במכונה, מגדירים את הדגל google_columnar_engine.enabled של המכונה לערך on.

שרת יחיד

כדי להגדיר את google_columnar_engine.enabled ל-on, פועלים לפי השלבים הבאים:

  1. מריצים את הפקודה ALTER SYSTEM PostgreSQL:

    ALTER SYSTEM SET google_columnar_engine.enabled = 'on'
    
  2. אם רוצים לשנות את ההגדרות של מנוע העמודות, צריך לפעול לפי ההוראות שבקטע הבא לפני שמפעילים מחדש את שרת מסד הנתונים. אחרת, מבצעים את השלב הבא כדי להפעיל מחדש את שרת מסד הנתונים.

  3. כדי שהשינוי בפרמטרים של ההגדרה ייכנס לתוקף, צריך להפעיל מחדש את הקונטיינר הפועל עם AlloyDB Omni.

    Docker

      sudo docker restart CONTAINER_NAME

    Podman

      sudo podman restart CONTAINER_NAME

הגדרת הגודל של מאגר העמודות

כשהמנוע מבוסס-העמודות מופעל במכונה, מערכת AlloyDB Omni מקצה חלק מהזיכרון של המכונה לאחסון הנתונים מבוססי-העמודות שלו. הקצאת זיכרון RAM מהיר לחנות העמודות מבטיחה ש-AlloyDB Omni יוכל לגשת לנתונים בעמודות במהירות האפשרית.

הזיכרון והמטמון של האחסון מייצגים יחד את הקיבולת הכוללת של מנוע מבוסס-עמודות.

הגדרת הזיכרון

אפשר להגדיר את ההקצאה לגודל קבוע באמצעות הדגל google_columnar_engine.memory_size_in_mb.

שרת יחיד

כדי להגדיר את הדגל google_columnar_engine.memory_size_in_mb במופע:

  1. מגדירים את הזיכרון על ידי הפעלת הפקודה ALTER SYSTEM PostgreSQL:

    ALTER SYSTEM SET google_columnar_engine.memory_size_in_mb = COLUMN_MEMORY_SIZE;
    

    מחליפים את COLUMN_MEMORY_SIZE בגודל החדש של אחסון העמודה, במגה-בייט – לדוגמה, 256.

  2. כדי שהשינוי בפרמטרים של ההגדרה ייכנס לתוקף, צריך להפעיל מחדש את הקונטיינר הפועל עם AlloyDB Omni.

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

הגדרת מטמון אחסון

שרת יחיד

אפשר להגדיר את מטמון האחסון של מנוע מבוסס-עמודות במכשירים ייעודיים או במכשירים משותפים.

מכשירים ייעודיים

במכשירים ייעודיים, כדי להפעיל מטמון של מנוע אחסון עמודתי ב-AlloyDB Omni עבור קונטיינר של שרת יחיד, צריך להקצות דיסקים וליצור מערכת קבצים, ואז לטעון את ספריית המטמון בתוך AlloyDB Omni, ולבסוף להפעיל את מטמון האחסון העמודתי.

הקצאת דיסקים ויצירת מערכת קבצים

כדי להקצות דיסקים וליצור מערכת קבצים למטמון של מנוע מבוסס-עמודות ב-AlloyDB Omni, יוצרים מערכת קבצים בדיסק אחד או בכמה דיסקים ומעלים אותה בתוך קונטיינר עם AlloyDB Omni. בנוסף, אפשר להשתמש בכלי עזר כמו mdadm או lvm כדי לאגד את הקיבולת באמצעות כמה דיסקים ולהשתמש בכל מערכת קבצים. השלבים הבאים מדגימים שימוש בפקודות lvm ו-ext4 במכונת Ubuntu ב-Compute Engine באמצעות NVMe SSD.

  1. כדי ליצור קבוצת עוצמת קול מכל המכשירים הפיזיים הזמינים:

    nvme_prefix="STORAGE_PREFIX"
    nvme_list=$(ls "$nvme_prefix"*)
    sudo vgcreate VOLUME_GROUP ${nvme_list}

    מחליפים את מה שכתוב בשדות הבאים:

    • STORAGE_PREFIX: הקידומת של הנתיב של הדיסקים המקומיים של היעד שמצורפים למכונה וירטואלית באמצעות ממשק NVMe (זיכרון מהיר לא נדיף) – לדוגמה, ב- Google Cloud, הנתיבים של מכשירי NVMe תמיד מתחילים ב-/dev/nvme0n.
    • VOLUME_GROUP: השם של קבוצת נפחים שבה משולבים כונני ה-SSD שלכם, לדוגמה, omni-disk-cache-volume.
  2. כדי ליצור נפח לוגי מהקיבולת הפנויה של קבוצת הנפחים מהשלב הקודם, משתמשים בפקודה הבאה:

    sudo lvcreate -n LOGICAL_VOLUME -l 100%FREE VOLUME_GROUP

    מחליפים את LOGICAL_VOLUME בשם של נפח לוגי שמערכת ה-LVM מתייחסת אליו כמחיצה – לדוגמה, omni_disk_cache_device.

  3. יוצרים את מערכת הקבצים ext4 בווליום הלוגי. אם צריך, אפשר לציין אפשרויות אחרות של ext4 בהתאם לאבטחת הנתונים.
    sudo mkfs.ext4 /dev/VOLUME_GROUP/LOGICAL_VOLUME
  4. כדי ליצור ספרייה שתשמש כנקודת טעינה במחשב המארח ולטעון את מערכת הקבצים, משתמשים בפקודה הבאה:

    sudo mkdir /OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY
    sudo mount /dev/VOLUME_GROUP/LOGICAL_VOLUME /OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY

    מחליפים את OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY בשם של הספרייה או בנתיב לספרייה שמשמשת כנקודת צירוף (mount point) – לדוגמה, omni_columnar_storage_cache_directory.

טעינת ספריית מטמון של אחסון עמודות בתוך AlloyDB Omni

לפני שמפעילים את מטמון הדיסק ב-AlloyDB Omni שפועל בקונטיינר, צריך לטעון את ספריית המטמון בתוך AlloyDB Omni.

מידע על התקנה של AlloyDB Omni מקובץ אימג' של Docker ועל התאמה אישית של ההתקנה מופיע במאמר התאמה אישית של ההתקנה של AlloyDB Omni.

כדי לטעון את OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY בתוך קונטיינר Docker שבו פועל AlloyDB Omni, משתמשים בפקודה הבאה:

Docker

  sudo docker run --name CONTAINER_NAME 
-e POSTGRES_PASSWORD=PASSWORD
-e PGDATA=/var/lib/postgresql/data/pgdata
-v DATA_DIR:/var/lib/postgresql/data
-v /OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d google/alloydbomni

מחליפים את מה שכתוב בשדות הבאים:

  • CONTAINER_NAME: השם שיוקצה למאגר החדש של AlloyDB Omni, לדוגמה my-omni.
  • PASSWORD: הסיסמה של מנהל הבסיס של מסד הנתונים של PostgreSQL.
  • DATA_DIR: הנתיב במערכת הקבצים שרוצים ש-AlloyDB Omni ישתמש בו לספריית הנתונים שלו.
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: ספריית המטמון בתוך קונטיינר AlloyDB Omni שממופה לנקודת הטעינה במחשב המארח – לדוגמה, בהתאם לערך של ספריית המטמון בתוך הקונטיינר, /omni_disk_cache_directory, בדומה ל-OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY, או /disk/cache/inside/container.

Podman

  podman run --name CONTAINER_NAME 
-e POSTGRES_PASSWORD=PASSWORD
-e PGDATA=/var/lib/postgresql/data/pgdata
-v DATA_DIR:/var/lib/postgresql/data
-v /OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d docker.io/google/alloydbomni

מחליפים את מה שכתוב בשדות הבאים:

  • CONTAINER_NAME: השם שיוקצה למאגר החדש של AlloyDB Omni, לדוגמה my-omni.
  • PASSWORD: הסיסמה של מנהל הבסיס של מסד הנתונים של PostgreSQL.
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: ספריית המטמון בתוך קונטיינר AlloyDB Omni שממופה לנקודת הטעינה במחשב המארח – לדוגמה, בהתאם לערך של ספריית המטמון בתוך הקונטיינר, /omni_columnar_storage_cache_directory, בדומה ל-OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY, או /disk/cache/inside/container.

כדי להעניק הרשאות גישה מלאות ל-OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY שנטען, משתמשים בפקודות הבאות:

Docker

  sudo docker exec -it CONTAINER_NAME chown postgres:postgres /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
  sudo docker exec -it CONTAINER_NAME chmod -R a+rw  /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
  

Podman

  sudo podman exec -it CONTAINER_NAME chown postgres:postgres /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
  sudo podman exec -it CONTAINER_NAME chmod -R a+rw  /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
  

הפעלת מטמון של אחסון עמודות ב-AlloyDB Omni ל-AlloyDB Omni שפועל בקונטיינר

כדי להפעיל מטמון של אחסון עמודות ב-AlloyDB Omni במכשירים ייעודיים למסד הנתונים, צריך להגדיר את הפרמטרים המתאימים של Grand Unified Configuration ‏ (GUC) אחרי שמוודאים שאפשר לגשת לספריית המטמון המצורפת מתוך קונטיינר Docker.

  1. מגדירים את ספריית המטמון של אחסון בעמודות:

    ALTER SYSTEM SET google_columnar_engine.omni_storage_cache_directory = OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY;
    

    מחליפים את OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY בנתיב המוחלט לספרייה הייעודית שבה רוצים ש-AlloyDB Omni ישמור את קובצי המטמון של אחסון מנוע מבוסס-עמודות. מוודאים שהספרייה הזו קיימת ושיש למשתמש במסד הנתונים הרשאות כתיבה מתאימות.

  2. מגדירים את גודל מטמון האחסון:

    ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;
    

    מחליפים את STORAGE_CACHE_SIZE בגודל של מטמון אחסון עמודות שרוצים, במגה-בייט. כברירת מחדל, כל הגודל של המכשיר הייעודי מוקצה למנוע העמודות, בלי להשפיע על מטמון הדיסק. הערך המקסימלי המותר לדגל הזה הוא 1,000 * google_columnar_engine.memory_size_in_mb, לפי הערך המינימלי.

  3. כדי שהשינוי בפרמטרים של ההגדרה ייכנס לתוקף, צריך להפעיל מחדש את הקונטיינר הפועל עם AlloyDB Omni.

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

מכשירים משותפים

לפני שמגדירים את המטמון של אחסון עמודות במכשירים משותפים עם מטמון דיסק, צריך להפעיל את מטמון הדיסק של AlloyDB Omni.

כדי להגדיר מטמון אחסון במכשירים משותפים:

  1. מגדירים את מטמון האחסון:

    ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;
    

    מחליפים את STORAGE_CACHE_SIZE בגודל של מטמון האחסון שרוצים, במגה-בייט. כברירת מחדל, מוקצים 5% ממטמון הדיסק למנוע מבוסס-עמודות. הערך המקסימלי המותר לסימון הזה הוא 50% מסך מטמון הדיסק או 1,000 * google_columnar_engine.memory_size_in_mb, הנמוך מביניהם.

  2. כדי שהשינוי בפרמטרים של ההגדרה ייכנס לתוקף, צריך להפעיל מחדש את הקונטיינר הפועל עם AlloyDB Omni.

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

הפעלה של הצטרפות וקטורית

למנוע מבוסס-עמודות יש תכונה של צירוף וקטורי שיכולה לשפר את הביצועים של צירופים על ידי החלת עיבוד וקטורי על שאילתות שעומדות בדרישות.

אחרי שמפעילים את ההצטרפות הווקטורית, למתכנן השאילתות של AlloyDB יש אפשרות להחיל את אופרטור ההצטרפות הווקטורית במקום אופרטור ההצטרפות הרגיל של PostgreSQL. המתכנן מקבל את ההחלטה הזו על ידי השוואה בין העלות של ביצוע השאילתה באמצעות כל אחת מהשיטות.

כדי להפעיל את התכונה 'צירוף וקטורי' במופע, מגדירים את הדגל google_columnar_engine.enable_vectorized_join של המופע לערך on.

כדי להגדיר את הדגל הזה במופע, מריצים את הפקודה ALTER SYSTEM של PostgreSQL:

ALTER SYSTEM SET google_columnar_engine.enable_vectorized_join = 'on';

מערכת AlloyDB Omni מקצה כברירת מחדל שרשור אחד לתכונה של הצטרפות וקטורית. אפשר להגדיל את מספר השרשורים שזמינים לתכונה הזו על ידי הגדרת הדגל google_columnar_engine.vectorized_join_threads לערך גדול יותר. הערך המקסימלי הוא cpu_count * 2.

רענון ידני של מנוע מבוסס-עמודות

כברירת מחדל, כשהמנוע מבוסס-עמודות מופעל, הוא מרענן את מאגר העמודות ברקע.

כדי לרענן את מנוע העמודות באופן ידני, מריצים את שאילתת ה-SQL הבאה:

SELECT google_columnar_engine_refresh(relation =>'TABLE_NAME');

מחליפים את TABLE_NAME בשם הטבלה או התצוגה החומרית שרוצים לרענן באופן ידני.

השבתת מנוע מבוסס-עמודות

כדי להשבית את מנוע Columbar במכונה, מגדירים את הדגל google_columnar_engine.enabled לערך off.

שרת יחיד

כדי להגדיר את google_columnar_engine.enabled ל-off, פועלים לפי השלבים הבאים:

  1. מריצים את הפקודה ALTER SYSTEM PostgreSQL:
ALTER SYSTEM SET google_columnar_engine.enabled = 'off'
  1. כדי שהשינוי בפרמטרים של ההגדרה ייכנס לתוקף, צריך להפעיל מחדש את הקונטיינר הפועל עם AlloyDB Omni.

Docker

כדי להפעיל מחדש קונטיינר של AlloyDB Omni, מריצים את הפקודה docker container restart:

  sudo docker restart CONTAINER_NAME

מחליפים את CONTAINER_NAME בשם שהקציתם לקונטיינר של AlloyDB Omni כשהתקנתם אותו.

Podman

כדי להפעיל מחדש קונטיינר של AlloyDB Omni, מריצים את הפקודה podman container start:

  sudo podman restart CONTAINER_NAME

מחליפים את CONTAINER_NAME בשם שהקציתם לקונטיינר של AlloyDB Omni כשהתקנתם אותו.

פתרון בעיות במנוע מבוסס-עמודות

פתרון השגיאה insufficient shared memory

אם מריצים את AlloyDB Omni בלי מספיק זיכרון משותף לשימוש במנוע מבוסס-העמודות, יכול להיות שתופיע השגיאה הבאה:

Insufficient shared memory for generating the columnar formats.

כדי לפתור את הבעיה הזו, צריך לציין את כמות הזיכרון המשותף שזמין לקונטיינר AlloyDB Omni. הדרך לעשות זאת משתנה בהתאם למערכת ההפעלה של המארח.

Linux

מגדילים את הגודל של מחיצת /dev/shm במחשב המארח באמצעות טכניקה כמו עריכת קובץ /etc/fstab.

macOS

מתקינים קונטיינר חדש של AlloyDB Omni, ומציינים ערך גדול יותר של זיכרון משותף לדגל --shm-size.

תיקון בעיה שגורמת לכך שהעמודות לא מתמלאות

אם העמודות לא מאוכלסות במנוע העמודות, יכול להיות שאחת מהסיבות הבאות נכונה:

  • העמודות שרוצים להוסיף כוללות סוג נתונים שלא נתמך.

  • אין עמידה בדרישות של המנוע מבוסס-העמודות.

כדי לפתור את הבעיה, אפשר לנסות את הפתרונות הבאים:

  • מוודאים שהטבלאות או התצוגות החומריות בשאילתה נמצאות במנוע העמודות.
  • כדי לוודא שנעשה שימוש במנוע העמודות, משתמשים בהצהרה EXPLAIN.

המאמרים הבאים