none
תזמון הרצות SQL RRS feed

  • שאלה

  • היי.

    האם מישהו מכיר איזשהו מנגנון או work-arround לתזמון הרצות SQL?

    הדוגמא שלי - אני רוצה לתת עדיפות ל-stored procedures וכדו' של הרצות של התוכנה על פני דו"חות. כלומר - אם יש 2 בקשות - לדעת למי לתת עדיפות.

    ב-2008 יש את ה-Resource Governor. מה עשו לפני?

    ולגבי ה-Resource Governor - האם ניתן לתזמן לפי שם stored procedure או איכשהו לסנן לפי מה יש בקריאה ולא לפי Login, DB name, תאריך  וכו'?


    itaigitt, http://copypastenet.blogspot.com
    יום שלישי 15 פברואר 2011 15:28

תשובות

  • הי,

    שאני אומר לבודד את עולם הדוחות אני מתכוון שאת סכימת הדוחות יש לייצר בנפרד ואז אפשר הגדרתית לשים אותה על DB נפרד או באותו DB העניין שה- file group צריך להיות שונה.

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

    בעזרת MAXDOP שלטנו על - CPU.

    בעזרת File groups על - IO.

    נשאר רק memory - במקרה זה אפשר להוסיף זיכרון ,במידה ואתה רואה שזה מהווה בעיה ע"י ניתור הזכרון, או להתקין instance נוסף שעליו יהיה ה- DB של הדוחות ולהגביל אותו בכמות הזכרון.

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

    שוב, אפשר לדסקס את זה, בגדול תהיה יצירתי, תבחן את סביבת התפעול ותראה האם אתה יכול להפריד את הקבצים, זה דרך אגב גם יכול להועיל בהרבה מקרים כגון:

    1. בניית טבלאות על FG אחד ואינדקסים על אחר.

    2. טבלאות שקוראים מהם הרבה לעומת כאלה שבעיקר כותבים וכו'...

    בהצלחה

     


    אסף שלם
    • סומן כתשובה על-ידי itaigitt יום רביעי 16 פברואר 2011 14:58
    יום רביעי 16 פברואר 2011 14:49

כל התגובות

  • שלום רב,

     

    לחברת וראסיטי ישנה חברת בת בשם more vrp .

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

    לפרטים נוספים:

    http://www.more-resource.com/


    Best Regards, Itai Binyamin SQL Server Group Manager Veracity Group www.Veracity-Group.com www.ItaiBinyamin.Blogspot.com
    יום שלישי 15 פברואר 2011 18:08
  • אני לא מכיר כלי מוכן (לא מכיר את הכלי שאיתי מדבר עליו) אבל אם יש לך גישה לפיתוח תוכנית קטנה אני יכול להציע דרך לבצע את זה (למשל בdot.net)

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

    תחילה צריך להבהיר נקודה: למה אתה מתכוון בו זמנית? הסיכוי לקבל 2 פ ניות בדיוק בו זמנית דיי קטן. האם אתה מתכוון באמת רק לנטר בקשות שגיעו בו זמנית או גם לנטר עבודה על פעולות שהגיעו כמעט בו זמנית (למשל בקשה A הגיעה ומתחילה ואז מגיעה בקשה B עם עדיפות ולכן יש לעצור את בקשה A ולעבור קודם לבקשה B). המצב השני הרבה יוצתר מורכב אבל כמובן אפשרי גם כן (לא אדון עליו כרגע אבל זה קשור בניהול threads גם)

    הרעיון הבסיס של ניהול עדיפות הוא שימוש במחלקה בשם Queue המובנית בדוט נט. בעזרת מחלקה זו ניתן לנהל את כל הבקשות המגיעות ולשמור אותם ב Queue (מעין מחסנית בקשות). על המחלקה תוכל לקרוא מעט כאן : http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=66

    עתה מה שנשאר זה במקום לפנות ישירות להרצת השאילתה להריץ DLL שאתה מכניס למסד הנתונים או להריץ תוכנית חיצונית במבצעת את הניהול של הפעלת הבקשות שנמצאות במחסנית הבקשות שלך

    הערה: ניתן כמובן להריץ את הבקשות שהגיעו גם בצורה א-סינכרונית במקביל.

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

    יום רביעי 16 פברואר 2011 07:01
    מנחה דיון
  • בוקר טוב לכולם.

    בגדול, העניין הוא כזה: אני רוצה לתת עדיפות להרצות מהתוכנה על פני הרצת דו"חות לדוגמא. העקרון הוא שלדו"ח אפשר לחכות (ברמת הסביר, כמובן) ותוכנה אמורה לרוץ מהר יותר.

    ההתלבטות\השאלה שלי מתחלקת ל-SQL 2008 ל-SQL 2005.

    ב-2008 ה-Resource Governor נותן פתרון של הקצאת משאבים לפי עדיפויות.

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

    ושאלה נוספת, האם אני יכול מהתוכנה לתת סימון לאיזו קבוצה אני רוצה לשייך את הקריאה? (מה שהותן פתרון לשאלה הקודמת).

    ב-2005, אין את Resource Governor. מה עשו אז?

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


    itaigitt, http://copypastenet.blogspot.com
    יום רביעי 16 פברואר 2011 07:25
  • זה בדיוק מה שהבנתי ממך קודם :-)

    כך שאולי ההסבר שלי היה גרוע ולא הבנת אותי כי זה בדיוק הכיוון לפתרון שנתתי לך (וגם הפתרון שנתן לך הבחור השני לפי מה שאני מבין למרות שאני לא מכיר את הכלי שהוא דיבר עליו)

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

    הרעיון הכללי שלי הוא כתיבת תוכנית קטנה שתבצע עבורך את ניהול הגישה (בדיוק כמו שעושה Resource Governor). אולי באמת אם אינך נגיש למפתח אז כדאי לחשוב על כלי מוכן (שוב אני מצטער אבל איני מכיר כלי מוכן לזה כי לא היה לי צורך בכזה עד היום)

    יום רביעי 16 פברואר 2011 09:26
    מנחה דיון
  • אבל תוכנה כזאת יכולה לדעת לתת עדיפות במשאבים לקבוצת הרצות מסויימת כמו שה-Resource Governor יודע לעשות?

    והאם יש לך רעיון לשאלה לגבי ה-Resource Governor?

    תודה!


    itaigitt, http://copypastenet.blogspot.com
    יום רביעי 16 פברואר 2011 09:57
  • הי איתי,

    שאלה לגבי הדוחות, האם הדוחות אוספים נתונים מטבלאות המקור או שיש סכימה\בסיס נתונים עבור בדוחות?

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

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

    יום טוב,

     

     


    אסף שלם
    יום רביעי 16 פברואר 2011 11:33
  • היי כולם. 

    נראה לי שלא הסברתי את עצמי טוב כ"כ.... נראה לי שהגענו למקומות מסובכים יותר ממה שהתכוונתי....

    יש לי 2 שאלות:

    1. Resource Governor, SQL SERVER 2008: האם ניתן לתזמן לפי שם stored procedure או איכשהו לסנן לפי מה יש בקריאה (כלומר - האם דו"ח\תוכנה) ולא לפי Login, DB name, תאריך וכו'?
    2. SQL SERVER 2005: איזה פתרונות נתנו למה שנותן Resource Governor ב-2008? אני צריך פתרון "פלסטר" - אנחנו לא נישאר הברה ב-2005, ככה שודאי לא נרכוש או נפתח תוכנות בשבילו.
    תודה!


    itaigitt, http://copypastenet.blogspot.com
    יום רביעי 16 פברואר 2011 11:42
  • הי איתי,

    מכוון שאתה עדין לא ב- 2008 מה שאתה יכול לעשות זה להשתמש האופציות שיש עבור ה Select כלומר אתה יכול להגדיר לדוגמא MAXDOP(1)  תכונה שתגרום לשאילתא להשתמש רק ב- CPU אחד וכל השאר בהנחה שיש יהיו לשרות האפליקציה.

    לינק שמסביר את הנקודה:

    http://blog.sqlauthority.com/2010/03/15/sql-server-maxdop-settings-to-limit-query-to-run-on-specific-cpu/

    שוב התשובה קצרה, יש הרבה אפשרויות צריך להבין את מבנה "עולם" הדוחות וסביבת התפעול.

    בהצלחה

     


    אסף שלם
    יום רביעי 16 פברואר 2011 13:18
  • ויש אפשרות להגביל גם משאבי זכרון וכו'?

    המטרה שלי היא להגיע למצב שיותר משאבים יופנו להרצה X על פני הרצה Y.


    itaigitt, http://copypastenet.blogspot.com
    יום רביעי 16 פברואר 2011 13:28
  • הי איתי,

    אני לא מכיר פתרון מובנה, צריך להיות יצירתיים.

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

    צריך להבין את הארכיטקטורה של בסיס הנתונים וכמובן את סביבת התפעול ע"מ לענות על השאלה.

     

     


    אסף שלם
    יום רביעי 16 פברואר 2011 14:07
  • אהלן אסף. אתה לא טועה.

    מה הכוונה בלבודד את "עולם" הדוחות? אתה מתכוון לייצר DB שונה, או בכלל שרת שונה?

    כל עוד הדו"חות והתוכנה ישבו על אותו שרת אז עדיין תהיה "התנגשות", לא?


    itaigitt, http://copypastenet.blogspot.com
    יום רביעי 16 פברואר 2011 14:32
  • הי,

    שאני אומר לבודד את עולם הדוחות אני מתכוון שאת סכימת הדוחות יש לייצר בנפרד ואז אפשר הגדרתית לשים אותה על DB נפרד או באותו DB העניין שה- file group צריך להיות שונה.

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

    בעזרת MAXDOP שלטנו על - CPU.

    בעזרת File groups על - IO.

    נשאר רק memory - במקרה זה אפשר להוסיף זיכרון ,במידה ואתה רואה שזה מהווה בעיה ע"י ניתור הזכרון, או להתקין instance נוסף שעליו יהיה ה- DB של הדוחות ולהגביל אותו בכמות הזכרון.

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

    שוב, אפשר לדסקס את זה, בגדול תהיה יצירתי, תבחן את סביבת התפעול ותראה האם אתה יכול להפריד את הקבצים, זה דרך אגב גם יכול להועיל בהרבה מקרים כגון:

    1. בניית טבלאות על FG אחד ואינדקסים על אחר.

    2. טבלאות שקוראים מהם הרבה לעומת כאלה שבעיקר כותבים וכו'...

    בהצלחה

     


    אסף שלם
    • סומן כתשובה על-ידי itaigitt יום רביעי 16 פברואר 2011 14:58
    יום רביעי 16 פברואר 2011 14:49
  • תודה!

    שאלה אחרונה, לגבי ה-Resource Governor ב-2008:

    האם אני יכול כבר מהקוד (.net, לא SQL) לקבוע לאיזו קבוצת WORKLOAD אני ישוייך? או שזה נקבע רק לפי ה-CLASSIFIER FUNCTION?


    itaigitt, http://copypastenet.blogspot.com
    יום רביעי 16 פברואר 2011 15:30
  • הי,

    עוד לא ממש התעמקתי בו, יש מאמר טוב באתר של מדירה ואיש קשר לנושא,

    http://www.madeira.co.il/getting-started-with-resource-governor/

    בהצלחה


    אסף שלם
    יום רביעי 16 פברואר 2011 21:20