זוהי הפקודה pt-table-usagep שניתן להפעיל בספק האירוח החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות המרובות שלנו בחינם כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS
תָכְנִית:
שֵׁם
pt-table-usage - נתח כיצד שאילתות משתמשות בטבלאות.
תַקצִיר
שימוש: pt-table-usage [אפשרויות] [קבצים]
pt-table-usage קורא שאילתות מיומן ומנתח כיצד הם משתמשים בטבלאות. אם אין FILE
שצוין, הוא קורא STDIN. הוא מדפיס דוח עבור כל שאילתה.
סיכונים
Percona Toolkit בוגר, מוכח בעולם האמיתי, ונבדק היטב, אבל כולו מסד נתונים
כלים יכולים להוות סיכון למערכת ולשרת מסד הנתונים. לפני השימוש בכלי זה,
אנא:
· קרא את התיעוד של הכלי
· עיין ב-"BUGS" הידוע של הכלי
· בדוק את הכלי בשרת שאינו ייצור
· גבה את שרת הייצור שלך ואמת את הגיבויים
תיאור
pt-table-usage קורא שאילתות מיומן ומנתח כיצד הם משתמשים בטבלאות. היומן צריך
להיות בפורמט יומן שאילתות איטי של MySQL.
השימוש בטבלה הוא יותר מסתם אינדיקציה לאיזה טבלאות השאילתה קוראת או כותבת.
זה גם מציין זרימת נתונים: נתונים פנימה ונתונים החוצה. הכלי קובע את זרימת הנתונים לפי
ההקשרים שבהם מופיעות טבלאות. שאילתה בודדת יכולה להשתמש בטבלה במספר שונות
הקשרים בו זמנית. הפלט של הכלי מפרט כל הקשר עבור כל טבלה. זֶה
רשימת CONTEXT-TABLE מציינת כיצד הנתונים זורמים בין טבלאות. הסעיף "פלט" מפרט
ההקשרים האפשריים ומתאר כיצד לקרוא דוח שימוש בטבלה.
הכלי מנתח את זרימת הנתונים עד לרמה של עמודות בודדות, כך שיועיל אם
עמודות מזוהות באופן חד משמעי בשאילתה. אם שאילתה משתמשת רק בטבלה אחת, אז
כל העמודות חייבות להיות מהטבלה הזו, ואין שום קושי. אבל אם שאילתה משתמשת
טבלאות מרובות ושמות העמודות אינם מתאימים לטבלה, אז יש צורך להשתמש
"הסבר מורחב", ואחריו "הצג אזהרות", כדי לקבוע לאילו טבלאות העמודות
שייכים.
אם הכלי אינו יודע את מסד הנתונים המוגדר כברירת מחדל של השאילתה, דבר שיכול להתרחש כאשר מסד הנתונים
לא מודפס ביומן, אז "הסבר מורחב" עלול להיכשל. במקרה זה, אתה יכול לציין
מסד נתונים ברירת מחדל עם "--database". אתה יכול גם להשתמש ב-"--create-table-definitions"
אפשרות לעזור בפתרון אי בהירות.
תפוקה
הכלי מדפיס דוח שימוש עבור כל טבלה בכל שאילתה, בדומה להלן:
Query_id: 0x1CD27577D202A339.1
עדכון t1
בחר כפול
הצטרף ל-t1
הצטרף ל-t2
היכן t1
Query_id: 0x1CD27577D202A339.2
עדכון t2
בחר כפול
הצטרף ל-t1
הצטרף ל-t2
היכן t1
השורה הראשונה מכילה את מזהה השאילתה, אשר כברירת מחדל זהה לאלו המוצגים ב- pt-
דוחות תקציר שאילתות. זהו בדיקת MD5 של "טביעת האצבע" של השאילתה, וזה מה
נשאר לאחר הסרת מילוליות, קריסת חלל לבן ועוד מגוון רחב
טרנספורמציות. למזהה השאילתה שני חלקים מופרדים על ידי נקודה: מזהה השאילתה וה-
מספר הטבלה. אם ברצונך להשתמש בערך אחר כדי לזהות את השאילתה, תוכל לציין
האפשרות "--id-attribute".
הדוגמה הקודמת מציגה שתי פסקאות עבור שאילתה בודדת, לא שתי שאילתות. ציין זאת
מזהה השאילתה זהה עבור השתיים, אך מספר הטבלה שונה. מספר הטבלה
גדל ב-1 עבור כל טבלה שהשאילתה מעדכנת. רק שאילתות עדכון מרובות שולחנות
יכול לעדכן מספר טבלאות בשאילתה אחת, כך שמספר הטבלה הוא 1 עבור כל השאר
סוגי שאילתות. (הכלי אינו תומך בשאילתות DELETE מרובות שולחנות.) הדוגמה
הפלט למעלה הוא מהשאילתה הזו:
עדכון t1 AS a JOIN t2 AS b USING (מזהה)
SET a.foo="bar", b.foo="bat"
WHERE a.id=1;
הסעיף "SET" מציין שהשאילתה מעדכנת שתי טבלאות: "a" בכינוי "t1", ו-"b"
בכינוי "t2".
לאחר השורה הראשונה, הכלי מדפיס מספר משתנה של שורות CONTEXT-TABLE. אפשרי
ההקשרים הם כדלקמן:
· בחר
SELECT פירושה שהשאילתה מאחזרת נתונים מהטבלה מאחת משתי סיבות. ה
ראשית יש להחזיר למשתמש כחלק ממערך תוצאות. רק שאילתות SELECT
להחזיר ערכות תוצאות, כך שהדוח תמיד מציג הקשר SELECT עבור שאילתות SELECT.
המקרה השני הוא כאשר הנתונים זורמים לטבלה אחרת כחלק מ-INSERT או UPDATE.
לדוגמה, שאילתת ה-UPDATE בדוגמה שלמעלה כוללת את השימוש:
בחר כפול
זה מתייחס ל:
SET a.foo="bar", b.foo="bat"
הכלי משתמש ב-DUAL עבור כל ערכים שאינם מקורם בטבלה, במקרה זה
ערכים מילוליים "בר" ו"עטלף". אם סעיף "SET" זה היה "SET a.foo=b.foo" במקום זאת,
אז השימוש המלא יהיה:
Query_id: 0x1CD27577D202A339.1
עדכון t1
בחר t2
הצטרף ל-t1
הצטרף ל-t2
היכן t1
הנוכחות של הקשר SELECT לאחר הקשר אחר, כגון UPDATE או INSERT,
מציין היכן ה-UPDATE או INSERT מאחזרים את הנתונים שלו. הדוגמה מיד
למעלה משקפת שאילתת UPDATE שמעדכנת שורות בטבלה "t1" עם נתונים מהטבלה
"t2".
· כל פועל אחר
כל פועל אחר, כגון INSERT, UPDATE, DELETE וכו' עשוי להיות הקשר. הפעלים האלה
לציין שהשאילתה משנה נתונים בדרך כלשהי. אם הקשר SELECT אחרי אחד מ
הפעלים האלה, אז השאילתה קוראת נתונים מטבלת SELECT וכותבת אותם לזה
שולחן. זה קורה, למשל, עם שאילתות INSERT..SELECT או UPDATE המשתמשות
ערכים מטבלאות במקום ערכים קבועים.
סוגי שאילתות אלה אינם נתמכים: SET, LOAD ו-DELETE מרובה שולחנות.
· הצטרפו
ההקשר JOIN מפרט טבלאות שמצטרפות, או עם JOIN מפורש ב-
משפט FROM, או באופן מרומז במשפט WHERE, כגון "t1.id = t2.id".
· איפה
ההקשר של WHERE מפרט טבלאות המשמשות במשפט WHERE לסינון תוצאות.
זה לא כולל טבלאות שמצטרפות באופן מרומז בסעיף WHERE; אלה הם
רשום כהקשרי JOIN. לדוגמה:
היכן t1.id > 100 ו-t1.id < 200 ו-t2.foo אינו NULL
תוצאות ב:
היכן t1
היכן t2
הכלי מפרט רק טבלאות נפרדות; זו הסיבה שהטבלה "t1" מופיעה רק פעם אחת.
· TLIST
ההקשר של TLIST מפרט טבלאות שהשאילתה ניגשת אליהן, אך אינן מופיעות באף אחת
הקשר אחר. טבלאות אלו הן בדרך כלל צירוף קרטזיאני מרומז. לדוגמה, ה
השאילתה "SELECT * FROM t1, t2" מביאה ל:
Query_id: 0xBDDEB6EDA41897A8.1
בחר t1
בחר t2
TLIST t1
TLIST t2
קודם כל, ישנם שני הקשרים SELECT, כי "SELECT *" בוחר שורות מכולם
שולחנות; "t1" ו-"t2" במקרה זה. שנית, הטבלאות מצטרפות באופן מרומז, אבל
ללא כל סוג של תנאי הצטרפות, מה שמביא לצירוף קרטזי כפי שמצוין על ידי
ההקשר של TLIST עבור כל אחד מהם.
יְצִיאָה סטָטוּס
pt-table-usage יוצא מ-1 בכל סוג של שגיאה, או 0 אם אין שגיאות.
אפשרויות
כלי זה מקבל ארגומנטים נוספים של שורת הפקודה. עיין ב"תקציר" והשימוש
מידע לפרטים.
--שאל-עבר
בקש סיסמה בעת התחברות ל-MySQL.
--charset
צורה קצרה: -A; סוג: מחרוזת
ערכת תווים ברירת מחדל. אם הערך הוא utf8, מגדיר את binmode של Perl ב-STDOUT ל-utf8,
מעביר את האפשרות mysql_enable_utf8 ל-DBD::mysql, ומפעיל את SET NAMES UTF8 לאחר
מתחבר ל-MySQL. כל ערך אחר מגדיר binmode על STDOUT ללא שכבת utf8,
ומריץ את SET NAMES לאחר התחברות ל-MySQL.
--config
סוג: מערך
קרא את הרשימה המופרדת בפסיקים של קובצי תצורה; אם צוין, זה חייב להיות הראשון
אפשרות בשורת הפקודה.
--ערך נתונים קבוע
סוג: מחרוזת; ברירת מחדל: DUAL
טבלה להדפסה כמקור לנתונים קבועים (מילוליים). זה כל נתונים לא
אוחזר מטבלאות (או משאילתות משנה, מכיוון שאילתות משנה אינן נתמכות). זֶה
כולל ערכים מילוליים כגון מחרוזות ("foo") ומספרים (42), או פונקציות כגון
"עַכשָׁיו()". לדוגמה, בשאילתה "INSERT INTO t (c) VALUES ('a')", המחרוזת 'a'
הוא נתונים קבועים, כך שדוח השימוש בטבלה הוא:
INSERT t
בחר כפול
השורה הראשונה מציינת שהשאילתה מוסיפה נתונים לטבלה "t", והשנייה
קו מציין שהנתונים שהוכנסו מגיעים מערך קבוע כלשהו.
--[לא] המשך בשגיאה
ברירת מחדל: כן
המשך לעבוד גם אם יש שגיאה.
--צור-טבלה-הגדרות
סוג: מערך
קרא את הגדרות "CREATE TABLE" מתוך רשימה זו של קבצים מופרדים בפסיקים. אם אתה
לא יכול להשתמש ב---explain-extended כדי להתאים את שמות הטבלאות והעמודות במלואן, אתה יכול לשמור
הפלט של "mysqldump --no-data" לקובץ אחד או יותר וציין את הקבצים האלה עם
אפשרות זו. הכלי ינתח את כל הגדרות "CREATE TABLE" מהקבצים ו
השתמש במידע זה כדי להתאים את שמות הטבלה והעמודות. אם מופיע שם עמודה ב
טבלאות מרובות, או ששם טבלה מופיע במספר מסדי נתונים, אי הבהירות לא יכולה
להיפתר.
-- לעשות דמוניזציה
מזלג לרקע ומתנתק מהקליפה. מערכות הפעלה POSIX בלבד.
--מאגר מידע
צורה קצרה: -D; סוג: מחרוזת
מסד נתונים ברירת מחדל.
-קובץ ברירת המחדל
צורה קצרה: -F; סוג: מחרוזת
קרא רק אפשרויות mysql מהקובץ הנתון. עליך לתת שם נתיב מוחלט.
--הסבר-מורחב
סוג: DSN
שרת לביצוע שאילתות EXPLAIN Extended. זה עשוי להיות נחוץ כדי לפתור
שמות עמודות וטבלאות מעורפלים (לא מתאימים).
--לְסַנֵן
סוג: מחרוזת
הסר אירועים שקוד Perl זה אינו מחזיר כ-true.
אפשרות זו היא מחרוזת של קוד Perl או קובץ המכיל קוד Perl שנערך
לתוך תת שגרה עם ארגומנט אחד: $event. אם הערך הנתון הוא קובץ קריא,
אז pt-table-usage קורא את הקובץ כולו ומשתמש בתוכן שלו כקוד.
מסננים מיושמים באותה צורה כמו בכלי pt-query-digest, אז בבקשה
עיין בתיעוד שלה למידע נוסף.
- עזרה
הצג עזרה וצא.
--מנחה
צורה קצרה: -h; סוג: מחרוזת
התחבר למארח.
--id-attribute
סוג: מחרוזת
זהה כל אירוע באמצעות תכונה זו. ברירת המחדל היא להשתמש במזהה שאילתה, כלומר
בדיקת MD5 של טביעת האצבע של השאילתה.
--עֵץ
סוג: מחרוזת
הדפס את כל הפלט לקובץ זה בעת ביצוע דמוניזציה.
--סיסמה
צורה קצרה: -p; סוג: מחרוזת
סיסמה לשימוש בעת החיבור. אם הסיסמה מכילה פסיקים יש לבצע אסקייפ
עם קו נטוי אחורי: "exam\,ple"
--pid
סוג: מחרוזת
צור את קובץ ה-PID הנתון. הכלי לא יופעל אם קובץ ה-PID כבר קיים ו
ה-PID שהוא מכיל שונה מה-PID הנוכחי. עם זאת, אם קובץ ה-PID
קיים וה-PID שהוא מכיל אינו פועל יותר, הכלי יחליף את ה-PID
קובץ עם ה-PID הנוכחי. קובץ ה-PID מוסר אוטומטית כאשר הכלי יוצא.
--נמל
צורה קצרה: -P; סוג: int
מספר יציאה לשימוש לחיבור.
--התקדמות
סוג: מערך; ברירת מחדל: זמן, 30
הדפס דוחות התקדמות ל-STDERR. הערך הוא רשימה מופרדת בפסיקים עם שני חלקים.
החלק הראשון יכול להיות אחוז, זמן או איטרציות; החלק השני מפרט כיצד
לעתים קרובות יש להדפיס עדכון, באחוזים, בשניות או במספר חזרות.
--שאילתא
סוג: מחרוזת
נתח את השאילתה שצוינה במקום לקרוא קובץ יומן.
--הפסקת קריאה
סוג: זמן; ברירת מחדל: 0
המתן כל כך הרבה זמן לאירוע מהקלט; 0 לחכות לנצח.
אפשרות זו מגדירה את הזמן המקסימלי להמתנה לאירוע מהקלט. אם אירוע הוא
לא התקבל לאחר הזמן שצוין, הכלי מפסיק לקרוא את הקלט ומדפיס אותו
דוחות.
אפשרות זו דורשת את מודול Perl POSIX.
--זמן ריצה
סוג: זמן
כמה זמן לרוץ לפני היציאה. ברירת המחדל היא לפעול לנצח (אתה יכול להפריע עם
CTRL-C).
--set-vars
סוג: מערך
הגדר את משתני MySQL ברשימה מופרדת בפסיקים של זוגות "משתנה=ערך".
כברירת מחדל, הכלי מגדיר:
wait_timeout=10000
משתנים שצוינו בשורת הפקודה עוקפים ברירות מחדל אלה. לדוגמה,
ציון "--set-vars wait_timeout=500" עוקף את ערך ברירת המחדל של 10000.
הכלי מדפיס אזהרה וממשיך אם לא ניתן להגדיר משתנה.
--שֶׁקַע
טפסים קצרים; סוג: מחרוזת
קובץ Socket לשימוש לחיבור.
--מִשׁתַמֵשׁ
צורה קצרה: -u; סוג: מחרוזת
משתמש לכניסה אם לא משתמש נוכחי.
--גִרְסָה
הצג גרסה וצא.
dsn אפשרויות
אפשרויות DSN אלה משמשות ליצירת DSN. כל אפשרות ניתנת כמו "אופציה=ערך".
האפשרויות תלויות רישיות, ולכן P ו-p אינן אותה אפשרות. לא יכול להיות
רווח לבן לפני או אחרי הסימן "=" ואם הערך מכיל רווח לבן יש לצטט אותו.
אפשרויות DSN מופרדות בפסיקים. ראה את דף המנגנון של percona-toolkit לפרטים מלאים.
א
dsn: charset; העתקה: כן
ערכת תווים ברירת מחדל.
· ד
עותק: לא
מסד נתונים ברירת מחדל.
· ו
dsn: mysql_read_default_file; עותק: לא
קרא רק אפשרויות ברירת מחדל מהקובץ הנתון
· ח
dsn: מארח; העתקה: כן
התחבר למארח.
· עמ'
dsn: סיסמה; העתקה: כן
סיסמה לשימוש בעת החיבור. אם הסיסמה מכילה פסיקים יש לבצע אסקייפ
עם קו נטוי אחורי: "exam\,ple"
· עמ '
dsn: יציאה; העתקה: כן
מספר יציאה לשימוש לחיבור.
· ש
dsn: mysql_socket; עותק: לא
קובץ Socket לשימוש לחיבור.
· u
dsn: משתמש; העתקה: כן
משתמש לכניסה אם לא משתמש נוכחי.
הסביבה
משתנה הסביבה "PTDEBUG" מאפשר פלט איתור באגים מילולי ל-STDERR. כדי לאפשר
איתור באגים ולכידת כל הפלט לקובץ, הפעל את הכלי כמו:
PTDEBUG=1 pt-table-usage ... > קובץ 2>&1
היזהר: פלט ניפוי באגים הוא נפח גדול ויכול ליצור כמה מגה-בייט של פלט.
מערכת דרישות
אתה צריך Perl, DBI, DBD::mysql וכמה חבילות ליבה שצריכות להיות מותקנות בכל
גרסה חדשה למדי של Perl.
השתמש ב-pt-table-usagep באינטרנט באמצעות שירותי onworks.net