יצירה וניהול של אינדקסים בעותקים לקריאה

בדף הזה מוסבר איך להוסיף אינדקסים ל-Cloud SQL read replicas ולהסיר אותם. בדרך כלל, רפליקה היא לקריאה בלבד, אבל יכול להיות שתרצו ליצור אינדקסים משניים בטבלאות למטרות דיווח. ‫Cloud SQL מציע קבוצה של פרוצדורות מאוחסנות לניהול האינדקסים האלה.

הסברים על המונחים

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

תהליכים מאוחסנים לאינדקסים

‫Cloud SQL כולל שתי פרוצדורות מאוחסנות בסכימה mysql שבהן אפשר להשתמש כדי להוסיף ולשחרר אינדקסים משניים בעותק לקריאה של MySQL. שימו לב: אמנם אפשר להריץ את הפרוצדורות האלה במופע של מקור ראשי, אבל הן מיועדות למופעים של רפליקות לקריאה.

mysql.addSecondaryIdxOnReplica
Adds a secondary index on the database. התהליך המאוחסן הזה הוא עטיפה (wrapper) של הצהרת ה-DDL‏ CREATE INDEX.

פרמטרים:

  • idxType – סוג האינדקס שרוצים ליצור. לדוגמה, מעבירים UNIQUE כדי ליצור אינדקס ייחודי.
  • idxName – שם האינדקס.
  • tableName – שם הטבלה בפורמט של schema.name.
  • idxDefinition – הגדרה של האינדקס. אל תכללו סוגריים חיצוניים.
  • idxOption – כל האפשרויות הנוספות להעברה יצירת אינדקס. לדוגמה, ב-MySQL 8.0, אפשר להעביר את האפשרות INVISIBLE לאינדקס בלתי נראה.

תחביר:

mysql.addSecondaryIdxOnReplica(idxType, idxName, tableName, idxDefinition, idxOption)
     
mysql.dropSecondaryIdxOnReplica
Drops a secondary index on the database. התהליך המאוחסן הזה הוא wrapper עבור הצהרת ה-DDL של DROP INDEX.

פרמטרים:

  • idxName – שם האינדקס.
  • tableName – שם הטבלה בפורמט של schema.name.
  • idxOption – אפשרויות נוספות להעברה כשמבטלים אינדקס. לדוגמה, אפשרות אלגוריתם כמו INPLACE.

תחביר:

mysql.dropSecondaryIdxOnReplica(idxName, tableName, idxOption)
      

לפרמטרים idxType ו-idxOption, אפשר לעיין במסמכי התיעוד של הגרסה הראשית של MySQL שפועלת במכונת Cloud SQL.

דוגמאות

שימוש נכון

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

CREATE TABLE sampletest.t1(
   id int(10) unsigned NOT NULL AUTO_INCREMENT,
   first_name varchar(64) NOT NULL,
   last_name varchar(64) NOT NULL,
   license_id int NOT NULL,
   PRIMARY KEY (id),
   KEY idx_fname (first_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

כדי ליצור אינדקס רגיל בשם t1_fname_lname בעמודות first_name ו-last_name, מריצים את הפקודה הבאה:

call mysql.addSecondaryIdxOnReplica('', 't1_fname_lname', 'sampletest.t1', 'first_name, last_name', '')

אם רוצים גם ליצור אינדקס ייחודי בשם t1_license_id בעמודה license_id עם ההערה "unique license id", מריצים את הפקודה הבאה:

call mysql.addSecondaryIdxOnReplica('unique', 't1_license_id', 'sampletest.t1', 'license_id', 'comment \"unique license id\"')

אם רוצים להסיר את האינדקס t1_fname_lname, מריצים את הפקודה הבאה:

call mysql.dropSecondaryIdxOnReplica('t1_fname_lname', 'sampletest.t1', '')

שימוש לא נכון

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

call mysql.addSecondaryIdxOnReplica('', 't1_extra_parenthesis', 'sampletest.t1', '(first_name, last_name)', '')

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

call mysql.addSecondaryIdxOnReplica('', 'idx_invalid', 'mysql.servers', 'host', '')

אפשר להשתמש בפרוצדורה dropSecondaryIdxOnReplica רק כדי להסיר אינדקסים שנוצרו קודם באמצעות הפרוצדורה addSecondaryIdxOnReplica. לדוגמה, הקריאה הבאה להסרת האינדקס הקיים idx_fname נכשלת.

call mysql.dropSecondaryIdxOnReplica('idx_fname', 'sampletest.t1', '')

הזרקת SQL בקריאות לפרוצדורות האלה תיכשל. לדוגמה, הזרקת ה-SQL הבאה עם רצף של הערות תיכשל.

call mysql.addSecondaryIdxOnReplica(\"user 'a'@'%' --\", 'idx_fname', 'sampletest.t1', 'first_name', '')

באופן דומה, ניסיון הזרקת SQL זה עם תו מפריד נכשל.

call mysql.addSecondaryIdxOnReplica('', 'idx_fname', 'sampletest.t1', 'first_name', ';flush status')

יצירה מחדש של רפליקות לקריאה

לפעמים, כשיש בעיה, Cloud SQL יוצר מחדש רפליקה לקריאה מהמקור הראשי כדי לשחזר במהירות את המופע. אינדקסים שנוצרו בעותק לקריאה לפני פעולת יצירה מחדש לא נשמרים. באחריות הלקוח ליצור מחדש את האינדקסים האלה באמצעות הפרוצדורות המאוחסנות ברפליקת הקריאה.

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