none
שאליתה וקריאה של נתונים מהזכרון. RRS feed

  • שאלה

  • אני מריץ את הדבר הבא :

    select

    top (100000) * from a

    inner

    join b

    on

    Da.ID=b.id

     אני בודק קריאה של דפים מהזכרון באמצעות סטטיסטיקות  ואני מקבל :  

    logical reads 406259 מטבלה a   שהיא טבלה עם  מליוני רשומות.

     

    אני מחליט לא לעשות select * אלא select  של שדה בודד מטבלה ש כדי להוריד את כמות הקריאות מהזכרון :

    select

     

    top (100000) a.id from

    a

    inner

     

    join

    b

    on

     

    Da.ID=b.ClickLogId

    פה עשיתי select עם בחירה של שדה אחד בלבד מטבלה a אבל עדיין שאני מריץ  set statitics io on

     אני מקבל logical reads 406259 מטבלה a  כאילו לא הורדתי מכמות  הקריאות והשאלה שלי  איך זה יכול להיות?

    יש foregin key   בין שתי הטבלאות  ואם  תוכנית פעולה תעזור אני יעלה גם אותה

    שרון

     

     

     

     

     

     

     

    יום רביעי 05 אוקטובר 2011 11:10

תשובות

  • הי שרון,

    כמות הקריאות נובעת מה- Join של שני הטבלאות, יש להבדיל בין החלק של ה- Select ל- From ... Joins בשאילתא.

    במידה ואתה רוצה להוריד את כמות ה- Reads תוודא שיש לך Index על שדות ה- Joins ו- Index על השדות המוחזרים.

    לגבי תוכנית הביצוע, שאתה מריץ סקריפטים לבדיקת IO ובכלל ב- SSMS, הייתי ממליץ לך להריץ את הפקודה DBCC FREEPROCCACHE לפני כל הרצה.

    בהצלחה


    אסף שלם
    • נערך על-ידי Assaf_Shalem יום רביעי 05 אוקטובר 2011 15:19
    • סומן כתשובה על-ידי pituachMVP, Editor יום רביעי 19 דצמבר 2012 14:15
    יום רביעי 05 אוקטובר 2011 15:13

כל התגובות

  • כל מה שעשית זה סינון של השדות ולא סינון של הרשומות ולכן אם תוכנית ההרצה לא השתנתה אז לפעמים אין סיבה שמספר ה logical reads ישתנה. אחרי היה צריך לקרוא ככל הנראה את אותם PAGES.

    http://netindonesia.net/blogs/kasim.wirama/archive/2008/04/20/logical-and-physical-read-in-sql-server-performance.aspx
    יום רביעי 05 אוקטובר 2011 11:44
    מנחה דיון
  • הי שרון,

    כמות הקריאות נובעת מה- Join של שני הטבלאות, יש להבדיל בין החלק של ה- Select ל- From ... Joins בשאילתא.

    במידה ואתה רוצה להוריד את כמות ה- Reads תוודא שיש לך Index על שדות ה- Joins ו- Index על השדות המוחזרים.

    לגבי תוכנית הביצוע, שאתה מריץ סקריפטים לבדיקת IO ובכלל ב- SSMS, הייתי ממליץ לך להריץ את הפקודה DBCC FREEPROCCACHE לפני כל הרצה.

    בהצלחה


    אסף שלם
    • נערך על-ידי Assaf_Shalem יום רביעי 05 אוקטובר 2011 15:19
    • סומן כתשובה על-ידי pituachMVP, Editor יום רביעי 19 דצמבר 2012 14:15
    יום רביעי 05 אוקטובר 2011 15:13