none
sql_handle plan_handle query_hash query_plan_hash RRS feed

  • שאלה

  • שלום לכולם,

    נתקלתי במושגים האלו והם נורא מבלבלים.

    יש אפשרות לקבל הסבר אפילו של שורה אחת לכל מושג?

    sql_handle

    plan_handle

    query_hash

    query_plan_hash

    תודה מראש :)

    יום חמישי 24 נובמבר 2016 13:53

תשובות

  • אהלן

    >> SQL Handle - זה ערך יוניקי ששמור לכל שאילתא שרצה 

    לא לשאילתה אלא ל Batche (יכול לכלול שאילתות רבות).

    >> Plan handle - זה ערך יוניקי ששמור לכל execution plan 

    כן

    >> יכול להיות SQL Handle יוניקי שישויך לו כמה Plan Handle

    נכון, למשל אתה יכול להריץ את התרגיל הבא:

    -- -- The view contains one row per query statement within the cached plan
    -- You can see that there are several rows with the same sql_handle with different plan_handle
    -- these are different queries in the same BATCH
    select QS.sql_handle, QS.plan_handle
    from sys.dm_exec_query_stats QS
    GO

    או את הקוד הבא:

    select QS.sql_handle, COUNT(QS.plan_handle)
    from sys.dm_exec_query_stats QS
    GROUP BY QS.sql_handle
    GO

    בדוגמא הראשנה מעל אתה מקבל שורה אחת עבור כל תוכנית הרצה plan_handle אבל יכול לגלות לפעמים כמה שורות של אותה קבוצה sql_handle
    בדוגמה השנייה אני סופר את ה plan_handle  בכל sql_handle

    >> לגבי query hash ולגבי query plan hash לא כל כך הצלחתי להבין

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

    אתה יכול לקרוא יותר על ערכים אלו בקישור הבא:

    https://technet.microsoft.com/en-us/library/cc645887%28v=sql.105%29.aspx

    >> האם מדובר על עוד ערך יוניקי שנוצר כדי להבחין באיזה DB התבצעה השאילתה/הexecution plan?

    לא

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

    הערך של query hash מחושב על ידי הפעלת הפונקציה על השאילתה והוא מאפשר לשרת לזהות שאילתות דומות. זה לא אומר שהשאילתות זהות אלא רק דומות ולכן ייתכן תוכניות הרצה שונה בסופו של דבר. מדובר בערך חשוב למיטוב העבודה של השרת מאחורי הקלעים.

    באותה מידה Query Plan Hash מחושב על ידי הפעלת פונקציית hash על תוכנית ההרצה המקומפלת וערך זה נועד לעזור לשרת לאתר (למצוא) תוכניות דונמות בצורה מהירה.


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]    [Linkedin]



    • נערך על-ידי pituachMVP, Editor יום שני 05 דצמבר 2016 08:27
    • סומן כתשובה על-ידי Netanelf יום שלישי 03 ינואר 2017 08:48
    יום שני 05 דצמבר 2016 08:16
    מנחה דיון

כל התגובות

  • שאלה נהדרת

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

    https://blogs.msdn.microsoft.com/sqlprogrammability/2007/01/09/2-0-sql_handle-and-plan_handle-explained/

    https://www.sqlskills.com/blogs/jonathan/how-useful-are-query_hash-and-query_plan_hash-for-troubleshooting/


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]    [Linkedin]

    יום שישי 25 נובמבר 2016 06:53
    מנחה דיון
  • היי רונן,

    תודה רבה על ההתייחסות.

    אני ארשום כאן מה הצלחתי להבין מהמאמרים ותאשר/תשלול/תרחיב לגבי מה שארשום בבקשה

    SQL Handle - זה ערך יוניקי ששמור לכל שאילתא שרצה 

    Plan handle - זה ערך יוניקי ששמור לכל execution plan 

    יכול להיות SQL Handle יוניקי שישויך לו כמה Plan Handle בגלל הגדרה שונה כמו בדוגמא quoted_identifier_off או quoted_identifier_on

    לגבי query hash ולגבי query plan hash לא כל כך הצלחתי להבין 
    האם מדובר על עוד ערך יוניקי שנוצר כדי להבחין באיזה DB התבצעה השאילתה/הexecution plan?

    תוכל בבקשה להרחיב/להסביר?

    תודה מראש!!!

    יום ראשון 04 דצמבר 2016 16:00
  • אהלן

    >> SQL Handle - זה ערך יוניקי ששמור לכל שאילתא שרצה 

    לא לשאילתה אלא ל Batche (יכול לכלול שאילתות רבות).

    >> Plan handle - זה ערך יוניקי ששמור לכל execution plan 

    כן

    >> יכול להיות SQL Handle יוניקי שישויך לו כמה Plan Handle

    נכון, למשל אתה יכול להריץ את התרגיל הבא:

    -- -- The view contains one row per query statement within the cached plan
    -- You can see that there are several rows with the same sql_handle with different plan_handle
    -- these are different queries in the same BATCH
    select QS.sql_handle, QS.plan_handle
    from sys.dm_exec_query_stats QS
    GO

    או את הקוד הבא:

    select QS.sql_handle, COUNT(QS.plan_handle)
    from sys.dm_exec_query_stats QS
    GROUP BY QS.sql_handle
    GO

    בדוגמא הראשנה מעל אתה מקבל שורה אחת עבור כל תוכנית הרצה plan_handle אבל יכול לגלות לפעמים כמה שורות של אותה קבוצה sql_handle
    בדוגמה השנייה אני סופר את ה plan_handle  בכל sql_handle

    >> לגבי query hash ולגבי query plan hash לא כל כך הצלחתי להבין

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

    אתה יכול לקרוא יותר על ערכים אלו בקישור הבא:

    https://technet.microsoft.com/en-us/library/cc645887%28v=sql.105%29.aspx

    >> האם מדובר על עוד ערך יוניקי שנוצר כדי להבחין באיזה DB התבצעה השאילתה/הexecution plan?

    לא

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

    הערך של query hash מחושב על ידי הפעלת הפונקציה על השאילתה והוא מאפשר לשרת לזהות שאילתות דומות. זה לא אומר שהשאילתות זהות אלא רק דומות ולכן ייתכן תוכניות הרצה שונה בסופו של דבר. מדובר בערך חשוב למיטוב העבודה של השרת מאחורי הקלעים.

    באותה מידה Query Plan Hash מחושב על ידי הפעלת פונקציית hash על תוכנית ההרצה המקומפלת וערך זה נועד לעזור לשרת לאתר (למצוא) תוכניות דונמות בצורה מהירה.


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]    [Linkedin]



    • נערך על-ידי pituachMVP, Editor יום שני 05 דצמבר 2016 08:27
    • סומן כתשובה על-ידי Netanelf יום שלישי 03 ינואר 2017 08:48
    יום שני 05 דצמבר 2016 08:16
    מנחה דיון
  • נטע האם ההסבר עזר?!?

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


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]    [Linkedin]

    יום שני 19 דצמבר 2016 05:47
    מנחה דיון
  • היי רונן,

    תודה רבה על התשובה המפורטת שעזרה מאוד.

    מצטער על העיכוב בתגובה ובסימון כתשובה.

    עזרת לי מאוד ועשית לי סדר ענקי תודה רבה!!!

    יום שלישי 03 ינואר 2017 08:49
  • אני שמח לשמוע :-)


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]    [Linkedin]

    יום שני 16 ינואר 2017 11:28
    מנחה דיון