ניהול תוכן של מאגר עמודות באופן ידני

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

ניהול טבלאות, תצוגות חומריות ואינדקסים של ScaNN

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

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

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

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

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

לפני שמתחילים

  • צריך להיות לכם אחד מתפקידי ה-IAM האלה בפרויקט Google Cloud שבו אתם משתמשים:
    • roles/alloydb.admin (תפקיד IAM מוגדר מראש של אדמין AlloyDB)
    • roles/owner (תפקיד בסיסי ב-IAM מסוג בעלים)
    • roles/editor (תפקיד בסיסי ב-IAM עם הרשאת עריכה)

    אם לא הוקצו לכם התפקידים האלה, פנו לאדמין הארגוני כדי לבקש גישה.

עדכון תוכן של מאגר עמודות באמצעות עדכון של דגלים במסד הנתונים

אפשר לנהל את התוכן של מאגר העמודות באופן ידני על ידי עדכון של google_columnar_engine.relations database flag. לדגל יש ערך יחיד שמציין את כל מקורות הנתונים של מאגר העמודות. במהלך ההפעלה מחדש, העמודות שצוינו בדגל הזה מאוכלסות באופן אוטומטי במאגר העמודות.

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

מידע נוסף על הגדרת פלאגים של מסד נתונים במופע באמצעות Google Cloud CLI או מסוף Google Cloud מופיע במאמר הגדרת פלאגים של מסד נתונים במופע.

הוספת עמודות באמצעות דגלים

כדי להוסיף עמודות למאגר העמודות, מגדירים את הדגל google_columnar_engine.relations של מופע. מגדירים את הערך שלו כרשימת פריטים מופרדת בפסיקים, כשכל פריט מציין רשימה של עמודות שצריך לכלול מטבלה ספציפית, בפורמט הבא:

DATABASE_NAME.SCHEMA_NAME.TABLE_NAME(COLUMN_LIST)

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

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

  • SCHEMA_NAME: הסכימה שמזהה את הטבלאות או את התצוגות החומריות שרוצים להוסיף למאגר העמודות. לדוגמה: public.

  • TABLE_NAME: הטבלה או התצוגה החומרית שמכילות את העמודות שרוצים להוסיף למאגר העמודות.

  • COLUMN_LIST: רשימה מופרדת בפסיקים של העמודות שרוצים להוסיף למאגר העמודות.

כדי להוסיף את כל העמודות של טבלה או תצוגה חומרית, משמיטים את רשימת העמודות:

DATABASE_NAME.SCHEMA_NAME.TABLE_NAME

מידע נוסף על הגדרת הדגלים של מסד הנתונים במופע זמין במאמר הגדרת הדגלים של מסד הנתונים במופע.

תחביר של Google Cloud CLI כשמשתמשים ב-google_columnar_engine.relations

אם משתמשים ב-Google Cloud CLI כדי להגדיר את הדגל google_columnar_engine.relations, צריך להשתמש בתחביר חלופי של תווי הפרדה כדי להפריד בין הדגלים של מסד הנתונים שהגדרתם. הסיבה לכך היא שרשימת העמודות מופרדת בפסיקים, ולכן צריך להשתמש בתו שאינו פסיק כשמציינים דגלים באותו ארגומנט של שורת הפקודה.

בדוגמה הבאה מוצג שימוש ב-CLI של gcloud כדי להוסיף שתי עמודות בסכימה public למאגר העמודות. בדוגמה מוגדר דגל נפרד להפעלת מנוע מבוסס-עמודות, כי כשמשתמשים בפקודה gcloud alloydb instance update כדי להגדיר דגל מסוים במסד נתונים, צריך להגדיר גם את כל שאר הדגלים במסד הנתונים שרוצים להגדיר להם ערכים שאינם ברירת מחדל, גם אם הם כבר מוגדרים.

gcloud alloydb instances update INSTANCE_NAME \
    --database-flags=^:^\
google_columnar_engine.relations='DATABASE_NAME.public.TABLE_NAME(COLUMN_1,COLUMN_2)'\
:google_columnar_engine.enabled=on\
[:FLAG_3=VALUE_3 ...] \
    --region=REGION_ID \
    --cluster=CLUSTER_ID

הסרת עמודות באמצעות דגלים

כדי להסיר עמודות ממאגר העמודות, מגדירים ערך חדש לדגל google_columnar_engine.relations שמתואר בקטע הקודם, ומשמיטים את העמודות שרוצים להסיר.

כדי להסיר את כל העמודות ממאגר העמודות, צריך לבטל את ההגדרה של הדגל google_columnar_engine.relations במופע.

מידע נוסף על הגדרת דגלים של מסד נתונים במופע זמין במאמר הגדרת דגלים של מסד נתונים במופע.

ניהול תוכן של מאגר עמודות באמצעות פונקציות SQL

אפשר לנהל את התוכן של מאגר העמודות באופן ידני באמצעות פונקציות SQL.

הערכת דרישות המקום לאחסון עמודות

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

לקוח psql

SELECT google_columnar_engine_estimate(
    relation => 'TABLE_NAME',
    columns => 'COLUMN_LIST'
);
    מחליפים את מה שכתוב בשדות הבאים:
  • TABLE_NAME: מחרוזת שמכילה את השם של הטבלה או התצוגה החומרית. אם הטבלה או התצוגה נמצאות בסכימה שאינה ציבורית, מציינים את שם הסכימה, נקודה ואת שם הטבלה או התצוגה. לדוגמה, 'myschema.mytable'.
  • COLUMN_LIST: מחרוזת שמכילה רשימה מופרדת בפסיקים של שמות העמודות שרוצים להוסיף. הרשימה תלוית-אותיות רישיות. אם רוצים להוסיף את כל העמודות בטבלה או בתצוגה החומרית לחנות העמודות, משמיטים את הפרמטר הזה.

הוספת עמודות באמצעות פונקציות SQL

מריצים את פונקציית ה-SQL‏ google_columnar_engine_add כדי להוסיף עמודות למאגר העמודות.

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

השיטה הזו לא משנה את הדגל של מסד הנתונים google_columnar_engine.relations. הפיכה אוטומטית של נתונים לעמודות לא מתייחסת לעמודות שנוספו על ידי פונקציית ה-SQL הזו.

לקוח psql

SELECT google_columnar_engine_add(
    relation => 'TABLE_NAME',
    columns => 'COLUMN_LIST'
);
    מחליפים את מה שכתוב בשדות הבאים:
  • ‫'TABLE_NAME': מחרוזת שמכילה את שם הטבלה או התצוגה החומרית. אם הטבלה או התצוגה נמצאות בסכימה שאינה public, מציינים את שם הסכימה, נקודה ואת שם הטבלה או התצוגה. לדוגמה: 'myschema.mytable'.
  • ‫'COLUMN_LIST': מחרוזת שמכילה רשימה מופרדת בפסיקים, תלוית-רישיות של שמות העמודות שרוצים להוסיף. אם רוצים להוסיף את כל העמודות בטבלה או בתצוגה החומרית לחנות העמודות, משמיטים את הפרמטר הזה.

הסרת עמודות באמצעות פונקציות SQL

מריצים את פונקציית ה-SQL‏ google_columnar_engine_drop באופן הבא:

לקוח psql

SELECT google_columnar_engine_drop(
    relation => 'TABLE_NAME',
    columns => 'COLUMN_LIST'
);
מחליפים את מה שכתוב בשדות הבאים:
  • ‫'TABLE_NAME': מחרוזת שמכילה את שם הטבלה או התצוגה החומרית. אם הטבלה או התצוגה נמצאות בסכימה שאינה public, מציינים את שם הסכימה, נקודה ואת שם הטבלה או התצוגה. לדוגמה: 'myschema.mytable'.
  • ‫'COLUMN_LIST': מחרוזת שמכילה רשימה מופרדת בפסיקים, תלוית-רישיות של שמות העמודות שרוצים להוסיף. אם רוצים להוסיף את כל העמודות בטבלה או בתצוגה החומרית לחנות העמודות, משמיטים את הפרמטר הזה.

אפשר להשתמש בפונקציה google_columnar_engine_drop כדי להסיר עמודות שהוספתם על ידי עריכת הדגל של מסד הנתונים google_columnar_engine.relations. עם זאת, כשעושים את זה, העמודות האלה מתווספות חזרה למאגר העמודות כשהמופע מופעל מחדש.

ניהול אינדקסים של ScaNN במנוע מבוסס-עמודות

כדי להאיץ את החיפוש הווקטורי, אפשר לטעון אינדקסים של ScaNN למטמון האינדקס של מנוע העמודות.

הוספה, הסרה ואימות של אינדקסים של ScaNN באמצעות פונקציות SQL

אפשר להוסיף, להסיר ולאמת ידנית אינדקסים של ScaNN ממטמון האינדקסים באמצעות פונקציות SQL. הוספת אינדקס למטמון יכולה להאיץ שאילתות של חיפוש וקטורי.

הוספת אינדקס ScaNN

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

SELECT google_columnar_engine_add_index(index => 'SCANN_INDEX_NAME');

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

הסרה של אינדקס ScaNN

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

SELECT google_columnar_engine_drop_index(index => 'SCANN_INDEX_NAME');

מחליפים את SCANN_INDEX_NAME בשם של אינדקס ScaNN שרוצים להסיר.

אימות השימוש במנוע עמודות

כדי לבדוק אם הסריקות של אינדקס הווקטורים משתמשות במנוע העמודות, מריצים את הפקודה EXPLAIN ANALYZE עם האפשרות COLUMNAR_ENGINE:

EXPLAIN (ANALYZE TRUE, SCANN TRUE, COSTS FALSE, TIMING FALSE, SUMMARY FALSE, VERBOSE FALSE, COLUMNAR_ENGINE TRUE)
SELECT * FROM t ORDER BY val <=> '[0.5,0.5,0.5,0.5]' LIMIT 100;

הפקודה מחזירה תוכנית שאילתה שדומה לזו:

Index Scan using t_ix3 on t t_1 (actual rows=100 loops=1)
      Order By: (val <=> '[0.5,0.5,0.5,0.5]'::vector)
      Limit: 100
      ScaNN Info: (... columnar engine nodes hit=6...)
      Columnar Engine ScaNN Info: (index found=true)

אם הפלט מכיל את המחרוזות columnar engine nodes hit ו-Columnar Engine ScaNN Info: (index found=true), זה אומר שהשאילתה מופעלת באמצעות מנוע עמודות.

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