none
בעיית free physical memory RRS feed

  • שאלה

  • היי,

    מדובר על שרת Windows 2008 64 bit ST SP2  בשרת 32 גיגה זיכרון פיזי ו-2 מעבדים 8 ליבות כ"א

    גרסת sql: 2008 ent 6 bit

    התפקיד היחידי של השרת הוא SQL Server . ל-SQL  הוקצה מקסימום  22 גיגה  מינימום 12 גיגה. התפקוד שלו כולל גם רפליקציה ואני מזהה את צריכת הזיכרון של ה- agents ואין דבר חריג.

    הבעיה היא שדרך ה- Task Manager כמות ה- physical memory היא קטנה מאוד: לעיתים 0 ולעיתים עשרות בודדות של MB. ה-SQL תופס את המקסימום שהוקצה לו.

    תופעה זו מתרחשת גם כשאנחנו מקצים ל-SQL פחות זיכרון, אז כביכול יתר השירותים מנצלים די במהירות את כל הזיכרון.
    בהמשך להמלצות שקיבלתי בפורום win server בדקתי וירוסים, עדכונים של OS ואת ה- proccesses והכל תקין.

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

    כמה שאלות:

    האם 10 גיגה למערכת ההפעלה זה לא מספיק ואפילו נדיב מדי?!

    האם ייתכנו בעיות ביצועים של ה-SQL בגלל כמות ה- physical free memory למרות ההקצאה ל-SQL ולמרות שאין בעיות I/O?

    וכמובן האם מישהו נתקל בבעיה זהה ?

    תודה מראש.

    יום שלישי 05 נובמבר 2013 13:21

תשובות

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

    "אם 10 גיגה למערכת ההפעלה זה לא מספיק ואפילו נדיב מדי?!"

    אמור להיות מספיק ביותר ומעל המספיק לצרכים שהצגת להערכתי. תזכור אבל שמערכת ההפעלה מנהלת מאחורי הקלעים גם את הפעולות של ה SQL. למשל ניהול ה THREADs נעשה על ידי הזכרון של מערכת ההפעלה ולא זה המוקצה ל SQL לידיעתי, ניהול ה CLR נעשה מהזכרון של מערכת ההפעלה (ראה הערה*), ניהול הודעות, פעולות של תוכנות צד שלישי כמו ניטור ה SQL, ה SSMS עצמו הוא למעשה מבוסס על ה VS הפשוט ואינו חלק מהשרת וכן הלאה. ככל שהמשאבים עולים מערכת ההפלע צריכה יותר זכרון לניהול המשאבים גם כן.

    "האם ייתכנו בעיות ביצועים של ה-SQL בגלל כמות ה- physical free memory למרות ההקצאה ל-SQL ולמרות שאין בעיות I/O?"

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

    "האם מישהו נתקל בבעיה זהה ?"

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

    האם יש לכם שימוש נרחב באלמנטים של CLR?
    הזכרון ב CLR מנוהל על ידי ה GC בצורה דינאמית. אני אתן עוד פרטים אם זה מעניין אבל פחות רלוונטי הפירוט. בעקרון זה מונע תופעות של זליגת זכרון שמוכר מאוד בעבודה עם VB למשל או C. ה GC יודע לנהל את הזכרון ולשחרר משאבים כאשר צריך אותן אבל הוא יכול גם לנצל את כל הזכרון כשהוא מוצא לנכון.

    * אתה אומר שה task manager מראה זכרון פנוי נמוך, אז למה לא תתחיל בניטור של מה תופס את הזכרון?

    פתח את ה perfmon + resource Monitor ותתחיל לנטר את הזכרון בלי קשר ל SQL (אם יש לכם איש IT אז מומלץ להטיל עליו את המשימה).


    [Personal Site] [Blog] [Facebook]signature

    • סומן כתשובה על-ידי eran2b יום רביעי 06 נובמבר 2013 08:23
    יום שלישי 05 נובמבר 2013 14:58
    מנחה דיון
  • היי ערן,

    לא מומלץ להתקין או להריץ תוכנות אנטי וירוס על שרת פרודקשיין שאמור להיות Dedicated SQL Server ממספר סיבות:

    1. שתוכנות מסוג אלו יכולות לצרוך כמות גדולה של זיכרון ו - IO.

    2. שרת SQL Server אמור להיות מוקשח ובעל הרשאות גישה מאוד ספציפיות לתוכנות מבחוץ כך שאין באמת צורך לעשות בדיקות שגרתיות של תוכנות אנטי וירוס.

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

    קישורים בנושא:

    http://blogs.msdn.com/b/boduff/archive/2009/07/27/is-your-anti-virus-strangling-sql-server.aspx?Redirected=true

    http://sqlmag.com/blog/sql-server-and-anti-virus

    -----------------------------
    Tomer Shtrum
    SQL Server consultent
    Madeira - SQL Server Services
    http://www.madeira.co.il

    • סומן כתשובה על-ידי eran2b יום שלישי 12 נובמבר 2013 11:13
    יום שלישי 12 נובמבר 2013 10:35
  • מסכים עם כל מילה של רונן

    המשימה הראשונה שלך היא לבדוק מי כן תופס את הזיכרון

    אם יש לנו 32 בסה"כ והכל תפוס ומתוכם רק 22 מוקצים ל SQL Server 
    יש לוודא מי תופס את השאר  - Task manager  ו/או resource monitor  יעשו את העבודה.

    יעזור מאוד עם תצרף תצלום מסך של Task manager  ממוין לפי memory
     קח בחשבון שכל שאר השירותים של SQL Server  כגון SSIS  SSRS SSAS  וכו'  אינם מנוהלים ע"י SQL Server   - כלומר יש להם הקצאת Max memory  משלהם  שלא מתחשבת ב SQL Server max memory.
    כמו כן, למיטב זכרוני SQL CLR   לא נספר בחישוב הזיכרון של SQL Server  

    מקווה שעזרתי,
    נועם

    • סומן כתשובה על-ידי eran2b יום רביעי 06 נובמבר 2013 08:23
    יום שלישי 05 נובמבר 2013 15:46
  • 1. CLR זה דוט-נט, זה לא רק "קשר" לדוט נט

    גם כשאתה מפתח אפליקציה ב C# יש לך CLR כמובן. זה מה שנעשה מאחורי הקלעים. כשמדברים עם DBA-ים בדרך נהוג לדבר על CLR כי אנחנו מכניסים לשרת ה SQL את הקובץ המקומפל ואין חשיבות לשפת המקור שלו (אפשר היה לכתוב אותו ב VB.NET או C# או F# אבל התוצאה שנוצרת באופן תיאורטית היא אותו דבר... כל השפות מקומפלות לאותה שפה בדוט-נט). כשמדברים עם מפתחים נהוג לדבר לפי השפת מקור שהם עובדים איתה. למשל  VB.NET או C# או F# וכו'

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

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

    אתה יכול לקרוא על שימוש ב CLR בשרתי SQL כאן:

    Introduction to SQL Server CLR Integration
    http://msdn.microsoft.com/en-us/library/ms254498(v=vs.110).aspx

    2. אני לא יודע מה ניטרתם, כיצד ומה ועל סמך איזה ידע הוחלט שמה שלוקח את המשאבים זו מערכת ההפעלה עצמה. אני לא יכול לשפוט את מי שניטר לכם את המערכת ובטח שלא לבצע ניטור בפורום. אני מנסה להיות עדין ולא להגיד כיצד נשמעת המסקנה שלכם, אם היא אכן כפי שאתה מציג אותה כאן. איזה מהתהליכים של מערכת ההפעלה דרש 10 גיגה זכרון אצלכם כשאר אין במערכת מותקן שום דבר פרט לשרת ה SQL אם אתם לא מבצעים פעולות יזומות?!? אתה לא יכול לבקש תמיכה ספציפית על המערכת שלכם כאשר אנחנו לא מכירים אותה ולא חקרנו אותה. תאתרו את הפעולה שגוררת את השימוש בזכרון, תאתרו את הצורך בפעולה, תבדקו איזה משימה מופעלת ולמה והאם אפשר לוותר עליה.

    אני נוטה להעריך שאתם קוראים לכל פעולה במערכת כ"מערכת ההפעלה" :-) האם משתמש שמעתיק קבצים ומבצע גיבויים וכיווצים של קבצים (פעולה מאוד יקרה) זו פעולה של מערכת ההפעלה? ממש לא! זו פעולה יזומה של המשתמש תחת מערכת ההפעלה, אבל היא לא פעולה שמהווה חלק מצורך של מערכת ההעפלה לפעול. יכול להיות שיש לכם פעולות כבדות על מערכת ההפעלה (כאמור צריך לנטר ולא לנחש... דחיסה/פתיחת דחיסה, קידוד ושבירת קידוד, העתקת קבצים ועוד פעולות כבדות יכולות להיות מקור לעניין). בקיצור זה נושא שקשור ל IT ולא ל SQL.

    3. כיצד אנחנו יכולים לדעת מה יבלע מה ומי יבלע את מי?!? האם הכריש יאכל את האדם או האדם את הכריש?!? תלוי בסיטואציה! אנחנו לא מכירים את המערכת שלכם ולא קיבלנו את המסקנה שלכם... תשאל את מי שקיבל את המסקנה. אם הוא איתר מה גורר את השימוש בזכרון הוא יוכל בשלב הבא לחשוב אם אותו גורם עלול לדרוש גם יותר זכרון.

    * אולי מי שקיבל את המסקנות כדאי שיצתרף לדיון גם כן...

    בשביל יותר מידע צריך יותר מידע
    הפורום הוא לא תמיד המקום לקבל את הפתרון הסופי אלא את ההכוונה והעזרה
    אולי הגיע הזמן לקחת ייעוץ חיצוני שיבדוק את המערכת בראייה מעט שונה...
    יש סיבה שיש אנשי מקצוע בשוק ויש להם עבודה. אם כל דבר היה אפשר לעשות בפורום אז החיים היו מאוד שונים :-)

    אני מקווה שזה לפחות עוזר בהכוונה :-)


    [Personal Site] [Blog] [Facebook]signature

    • סומן כתשובה על-ידי eran2b יום רביעי 06 נובמבר 2013 11:31
    יום רביעי 06 נובמבר 2013 11:24
    מנחה דיון
  • הי,

    יכול להיות שפספסתי משהו, אבל מי אמר שיש כאן בכלל בעיה?

    האם אתם חווים בעיות ביצועים כלשהן?

    לפי התיאור שלך, יכול להיות של-SQL Server, לאפליקציות אחרות ולמערכת ההפעלה - לכולם יש מספיק זכרון, וכולם מרוצים.

    יש לך אינדיקציה כלשהי לבעיה?

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    • סומן כתשובה על-ידי eran2b יום ראשון 10 נובמבר 2013 15:06
    יום ראשון 10 נובמבר 2013 11:58
    מנחה דיון
  • הי,

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

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    • סומן כתשובה על-ידי eran2b יום שלישי 12 נובמבר 2013 07:50
    יום שלישי 12 נובמבר 2013 07:42
    מנחה דיון
  • אהלן, בוא ננסה לנתח את הנתונים החדשים:

    1. שירות svchost.exe

    According to Microsoft: “svchost.exe is a generic host process name for services that run from dynamic-link libraries”.

    מה זה אומר? מיקרוסופט העבירו פונקציונליות מהשירותים הפנימיים של Windows לתוך קבצי dll. מנקודת מבט של מפתח זו פעולה הגיונית יותר לשימוש חוזר... אבל הבעיה היא שאתה לא יכול להפעיל את קובץ Dll ישירות, לכן תהליך svchost.exe נולד. מה שאתה רואה זה רק ההשלכה של התהליך ולא מה שקורה באמת מאחורי הקלעים ומה התהליך מבצע. 19 תהליכים של svchost זה קטן :-) ראיתי מערכות עם עשרות תהליכים והכל היה תקין.

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

    הבעיה המרכזית היא לאתר איזה תהליך מקושר לאיזה INSTANCE של svchost. ב GUI של מנהל המשימות זה קשה מאוד. אפשר להשתמש בפקודה:

    tasklist /SVC

    או בממשק ה GUI ללחוץ על כפתור ימני של העכבר ולבחור Go to Service

    המטרה אם כן לנטר מהן התהליכים האמיתיים שדורשים את המשאבים ולא מה ה THREAD שמופעל על ידי השירות svchost.exe

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

    הערה: הנתון הזה מעלה את החשש שהמערכת שלכם לא משמשת רק כשרת SQL אלא גם בעמדה של משתמש מקומי. האם אתם עובדים עם השרת למשל כדי לגלוש באינטרנט או לפתח עם תוכנות כמו VS וכו' ? מה הסיכוי שמותקן אופיס למשל? ייתכן שאתם העמסתם על השרת פעולות נוספות עם הזמן וצריך לאתר מהן.

    * תמיד אפשר להוסיף זכרון :-) היום המחירים לא גבוהים יחסית ולפעמים זה יותר מהר וניטור. מצד שני לפעמים תגלה שמה שאוכל 30% מהזכרון כרגע פשוט נעצר ובעצם הוא רוצה לאכול יותר וכאשר יהיו לו יותר זכרון הוא ישתמש גם בו. בעיקר במצב של זליגת זכרון יכולה להיות בעיה כזו שכל זכרון ששמים בסוף יתפס.


    [Personal Site] [Blog] [Facebook]signature

    • סומן כתשובה על-ידי eran2b יום שלישי 12 נובמבר 2013 11:13
    יום שלישי 12 נובמבר 2013 10:28
    מנחה דיון

כל התגובות

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

    "אם 10 גיגה למערכת ההפעלה זה לא מספיק ואפילו נדיב מדי?!"

    אמור להיות מספיק ביותר ומעל המספיק לצרכים שהצגת להערכתי. תזכור אבל שמערכת ההפעלה מנהלת מאחורי הקלעים גם את הפעולות של ה SQL. למשל ניהול ה THREADs נעשה על ידי הזכרון של מערכת ההפעלה ולא זה המוקצה ל SQL לידיעתי, ניהול ה CLR נעשה מהזכרון של מערכת ההפעלה (ראה הערה*), ניהול הודעות, פעולות של תוכנות צד שלישי כמו ניטור ה SQL, ה SSMS עצמו הוא למעשה מבוסס על ה VS הפשוט ואינו חלק מהשרת וכן הלאה. ככל שהמשאבים עולים מערכת ההפלע צריכה יותר זכרון לניהול המשאבים גם כן.

    "האם ייתכנו בעיות ביצועים של ה-SQL בגלל כמות ה- physical free memory למרות ההקצאה ל-SQL ולמרות שאין בעיות I/O?"

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

    "האם מישהו נתקל בבעיה זהה ?"

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

    האם יש לכם שימוש נרחב באלמנטים של CLR?
    הזכרון ב CLR מנוהל על ידי ה GC בצורה דינאמית. אני אתן עוד פרטים אם זה מעניין אבל פחות רלוונטי הפירוט. בעקרון זה מונע תופעות של זליגת זכרון שמוכר מאוד בעבודה עם VB למשל או C. ה GC יודע לנהל את הזכרון ולשחרר משאבים כאשר צריך אותן אבל הוא יכול גם לנצל את כל הזכרון כשהוא מוצא לנכון.

    * אתה אומר שה task manager מראה זכרון פנוי נמוך, אז למה לא תתחיל בניטור של מה תופס את הזכרון?

    פתח את ה perfmon + resource Monitor ותתחיל לנטר את הזכרון בלי קשר ל SQL (אם יש לכם איש IT אז מומלץ להטיל עליו את המשימה).


    [Personal Site] [Blog] [Facebook]signature

    • סומן כתשובה על-ידי eran2b יום רביעי 06 נובמבר 2013 08:23
    יום שלישי 05 נובמבר 2013 14:58
    מנחה דיון
  • מסכים עם כל מילה של רונן

    המשימה הראשונה שלך היא לבדוק מי כן תופס את הזיכרון

    אם יש לנו 32 בסה"כ והכל תפוס ומתוכם רק 22 מוקצים ל SQL Server 
    יש לוודא מי תופס את השאר  - Task manager  ו/או resource monitor  יעשו את העבודה.

    יעזור מאוד עם תצרף תצלום מסך של Task manager  ממוין לפי memory
     קח בחשבון שכל שאר השירותים של SQL Server  כגון SSIS  SSRS SSAS  וכו'  אינם מנוהלים ע"י SQL Server   - כלומר יש להם הקצאת Max memory  משלהם  שלא מתחשבת ב SQL Server max memory.
    כמו כן, למיטב זכרוני SQL CLR   לא נספר בחישוב הזיכרון של SQL Server  

    מקווה שעזרתי,
    נועם

    • סומן כתשובה על-ידי eran2b יום רביעי 06 נובמבר 2013 08:23
    יום שלישי 05 נובמבר 2013 15:46
  • היי,

    ראשית תודה על התשובה, כמה נקודות שחשוב לי להבין:

    1. להבנתי CLR קשור בעבודת .net מול ה-SQL . בדקתי ואצלנו הוא enable וכן,-האיטיות היא בעבודה באפליקציית .net המבצעת פעולות insert.

    השאלה שלי היא למה הכוונה ב- "האם יש לכם שימוש נרחב באלמנטים של CLR? מהן אותם אלמנטים ואיך אני יכול לראות את צריכת הזיכרון שלהם ובכלל אם יש בעיות אתם?

    דרך אגב, בית התוכנה לא ידע האם הם משתמשים ב-CLR- האם הם צריכים לדעת או שזה  בסדר שזה שקוף מבחינתם?

    אשמח אם תרחיב ככל שניתן.

    2.בנוגע לזיכרון- ניטרנו את מה שצריך, עברנו על כל תהליך ב- Task Manager ולא גילינו שום דבר חריג.

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

    בכל מקרה המסקנה הלא מפתיעה היא שאנחנו צריכים להרחיב זיכרון ולהקצות יותר למערכת ההפעלה. השאלה שנותרה פתוחה היא אם אני אתן למערכת הפעלה 20 גיגה זיכרון , האם הוא ייבלע באופן שמתרחש כרגע. זה בכל מקרה לא סותר את המסקנה.

    אשמח לכל מידע- תודה.

    יום רביעי 06 נובמבר 2013 09:02
  • 1. CLR זה דוט-נט, זה לא רק "קשר" לדוט נט

    גם כשאתה מפתח אפליקציה ב C# יש לך CLR כמובן. זה מה שנעשה מאחורי הקלעים. כשמדברים עם DBA-ים בדרך נהוג לדבר על CLR כי אנחנו מכניסים לשרת ה SQL את הקובץ המקומפל ואין חשיבות לשפת המקור שלו (אפשר היה לכתוב אותו ב VB.NET או C# או F# אבל התוצאה שנוצרת באופן תיאורטית היא אותו דבר... כל השפות מקומפלות לאותה שפה בדוט-נט). כשמדברים עם מפתחים נהוג לדבר לפי השפת מקור שהם עובדים איתה. למשל  VB.NET או C# או F# וכו'

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

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

    אתה יכול לקרוא על שימוש ב CLR בשרתי SQL כאן:

    Introduction to SQL Server CLR Integration
    http://msdn.microsoft.com/en-us/library/ms254498(v=vs.110).aspx

    2. אני לא יודע מה ניטרתם, כיצד ומה ועל סמך איזה ידע הוחלט שמה שלוקח את המשאבים זו מערכת ההפעלה עצמה. אני לא יכול לשפוט את מי שניטר לכם את המערכת ובטח שלא לבצע ניטור בפורום. אני מנסה להיות עדין ולא להגיד כיצד נשמעת המסקנה שלכם, אם היא אכן כפי שאתה מציג אותה כאן. איזה מהתהליכים של מערכת ההפעלה דרש 10 גיגה זכרון אצלכם כשאר אין במערכת מותקן שום דבר פרט לשרת ה SQL אם אתם לא מבצעים פעולות יזומות?!? אתה לא יכול לבקש תמיכה ספציפית על המערכת שלכם כאשר אנחנו לא מכירים אותה ולא חקרנו אותה. תאתרו את הפעולה שגוררת את השימוש בזכרון, תאתרו את הצורך בפעולה, תבדקו איזה משימה מופעלת ולמה והאם אפשר לוותר עליה.

    אני נוטה להעריך שאתם קוראים לכל פעולה במערכת כ"מערכת ההפעלה" :-) האם משתמש שמעתיק קבצים ומבצע גיבויים וכיווצים של קבצים (פעולה מאוד יקרה) זו פעולה של מערכת ההפעלה? ממש לא! זו פעולה יזומה של המשתמש תחת מערכת ההפעלה, אבל היא לא פעולה שמהווה חלק מצורך של מערכת ההעפלה לפעול. יכול להיות שיש לכם פעולות כבדות על מערכת ההפעלה (כאמור צריך לנטר ולא לנחש... דחיסה/פתיחת דחיסה, קידוד ושבירת קידוד, העתקת קבצים ועוד פעולות כבדות יכולות להיות מקור לעניין). בקיצור זה נושא שקשור ל IT ולא ל SQL.

    3. כיצד אנחנו יכולים לדעת מה יבלע מה ומי יבלע את מי?!? האם הכריש יאכל את האדם או האדם את הכריש?!? תלוי בסיטואציה! אנחנו לא מכירים את המערכת שלכם ולא קיבלנו את המסקנה שלכם... תשאל את מי שקיבל את המסקנה. אם הוא איתר מה גורר את השימוש בזכרון הוא יוכל בשלב הבא לחשוב אם אותו גורם עלול לדרוש גם יותר זכרון.

    * אולי מי שקיבל את המסקנות כדאי שיצתרף לדיון גם כן...

    בשביל יותר מידע צריך יותר מידע
    הפורום הוא לא תמיד המקום לקבל את הפתרון הסופי אלא את ההכוונה והעזרה
    אולי הגיע הזמן לקחת ייעוץ חיצוני שיבדוק את המערכת בראייה מעט שונה...
    יש סיבה שיש אנשי מקצוע בשוק ויש להם עבודה. אם כל דבר היה אפשר לעשות בפורום אז החיים היו מאוד שונים :-)

    אני מקווה שזה לפחות עוזר בהכוונה :-)


    [Personal Site] [Blog] [Facebook]signature

    • סומן כתשובה על-ידי eran2b יום רביעי 06 נובמבר 2013 11:31
    יום רביעי 06 נובמבר 2013 11:24
    מנחה דיון
  • היי,

    ראשית שוב תודה על התגובה המהירה והמידע.

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

    אבל כמובן שאני לא מצפה ממישהו שיבטיח לי פתרון קסם או שיעמוד מאחורי המסקנות שלי, לכן אם משהו מהדברים שכתבתי עד כה גרם לך להגיב כמו שהגבת בסעיפים 2+3- אתך הסליחה...

    יום רביעי 06 נובמבר 2013 11:50
  • זה לא מה שהתכוונתי ערן :-)

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

    תודה על התודה,

    גלישה מהנה


    [Personal Site] [Blog] [Facebook]signature

    יום רביעי 06 נובמבר 2013 12:20
    מנחה דיון
  • הי,

    יכול להיות שפספסתי משהו, אבל מי אמר שיש כאן בכלל בעיה?

    האם אתם חווים בעיות ביצועים כלשהן?

    לפי התיאור שלך, יכול להיות של-SQL Server, לאפליקציות אחרות ולמערכת ההפעלה - לכולם יש מספיק זכרון, וכולם מרוצים.

    יש לך אינדיקציה כלשהי לבעיה?

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    • סומן כתשובה על-ידי eran2b יום ראשון 10 נובמבר 2013 15:06
    יום ראשון 10 נובמבר 2013 11:58
    מנחה דיון
  • היי,

    כן, יש לנו אינדיקציה. מניסוי וטעיה גילינו שכשיש מעט זיכרון פיזי פנוי ( עשרות בודדות ולפעמים גם פחות מ- 10 מגה פנוי..) השרת מגיב לאט יותר לפעולת insert ו- update של האפליקציה שמתבצעות במקביל ע"י כמה תחנות עבודה. הניסוי הוכיח שהפעולות האלה מתקצרות שכמות הזיכרון גדולה יותר ( בין 200 מגה ל- 1 גיגה)

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

    יום ראשון 10 נובמבר 2013 15:05
  • הי,

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

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    • סומן כתשובה על-ידי eran2b יום שלישי 12 נובמבר 2013 07:50
    יום שלישי 12 נובמבר 2013 07:42
    מנחה דיון
  • יש שם 19 תהליכים  של svhost שהגדול ביניהם לוקח 500 מגה והיתר כמה עשרות. 

     יש  services של אנטי וירוס שלא חוסך מעצמו זיכרון  ( בדקנו שהוא לא סורק ספריות מיותרות וכו'..) יש:

     SQL Agents, log reader agent, dist' agent, backupagent, HP services

    בדקנו שאין וירוסים או חוסר תקינות של מערכת ההפעלה מבחינת עדכונים וכו'. לא ראינו פעולות i/0 או מעבד חריגות -

    לכן המסקנה שלנו שנוסיף זיכרון שאת רובו נקצה למערכת ההפעלה.

    פיספסתי משהו?

    יום שלישי 12 נובמבר 2013 08:07
  • אהלן, בוא ננסה לנתח את הנתונים החדשים:

    1. שירות svchost.exe

    According to Microsoft: “svchost.exe is a generic host process name for services that run from dynamic-link libraries”.

    מה זה אומר? מיקרוסופט העבירו פונקציונליות מהשירותים הפנימיים של Windows לתוך קבצי dll. מנקודת מבט של מפתח זו פעולה הגיונית יותר לשימוש חוזר... אבל הבעיה היא שאתה לא יכול להפעיל את קובץ Dll ישירות, לכן תהליך svchost.exe נולד. מה שאתה רואה זה רק ההשלכה של התהליך ולא מה שקורה באמת מאחורי הקלעים ומה התהליך מבצע. 19 תהליכים של svchost זה קטן :-) ראיתי מערכות עם עשרות תהליכים והכל היה תקין.

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

    הבעיה המרכזית היא לאתר איזה תהליך מקושר לאיזה INSTANCE של svchost. ב GUI של מנהל המשימות זה קשה מאוד. אפשר להשתמש בפקודה:

    tasklist /SVC

    או בממשק ה GUI ללחוץ על כפתור ימני של העכבר ולבחור Go to Service

    המטרה אם כן לנטר מהן התהליכים האמיתיים שדורשים את המשאבים ולא מה ה THREAD שמופעל על ידי השירות svchost.exe

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

    הערה: הנתון הזה מעלה את החשש שהמערכת שלכם לא משמשת רק כשרת SQL אלא גם בעמדה של משתמש מקומי. האם אתם עובדים עם השרת למשל כדי לגלוש באינטרנט או לפתח עם תוכנות כמו VS וכו' ? מה הסיכוי שמותקן אופיס למשל? ייתכן שאתם העמסתם על השרת פעולות נוספות עם הזמן וצריך לאתר מהן.

    * תמיד אפשר להוסיף זכרון :-) היום המחירים לא גבוהים יחסית ולפעמים זה יותר מהר וניטור. מצד שני לפעמים תגלה שמה שאוכל 30% מהזכרון כרגע פשוט נעצר ובעצם הוא רוצה לאכול יותר וכאשר יהיו לו יותר זכרון הוא ישתמש גם בו. בעיקר במצב של זליגת זכרון יכולה להיות בעיה כזו שכל זכרון ששמים בסוף יתפס.


    [Personal Site] [Blog] [Facebook]signature

    • סומן כתשובה על-ידי eran2b יום שלישי 12 נובמבר 2013 11:13
    יום שלישי 12 נובמבר 2013 10:28
    מנחה דיון
  • היי ערן,

    לא מומלץ להתקין או להריץ תוכנות אנטי וירוס על שרת פרודקשיין שאמור להיות Dedicated SQL Server ממספר סיבות:

    1. שתוכנות מסוג אלו יכולות לצרוך כמות גדולה של זיכרון ו - IO.

    2. שרת SQL Server אמור להיות מוקשח ובעל הרשאות גישה מאוד ספציפיות לתוכנות מבחוץ כך שאין באמת צורך לעשות בדיקות שגרתיות של תוכנות אנטי וירוס.

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

    קישורים בנושא:

    http://blogs.msdn.com/b/boduff/archive/2009/07/27/is-your-anti-virus-strangling-sql-server.aspx?Redirected=true

    http://sqlmag.com/blog/sql-server-and-anti-virus

    -----------------------------
    Tomer Shtrum
    SQL Server consultent
    Madeira - SQL Server Services
    http://www.madeira.co.il

    • סומן כתשובה על-ידי eran2b יום שלישי 12 נובמבר 2013 11:13
    יום שלישי 12 נובמבר 2013 10:35
  •  היי,

    תודה על התשובות ובעיקר על המידע.

    בדקנו על מה כל svhost עובד בדיוק באופן שהסברת ולא מצאנו שוב בעיה, כל ה- services מוכרים ותקינים.

    לגבי השימוש הנוסף בשרת: נכון, אנחנו משתמשים בו לעיתים, לא בשוטף, אבל אין ברירה אחרת.

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

    לגבי: "מצד שני לפעמים תגלה שמה שאוכל 30% מהזכרון כרגע פשוט נעצר ובעצם הוא רוצה לאכול יותר וכאשר יהיו לו יותר זכרון הוא ישתמש גם בו. בעיקר במצב של זליגת זכרון יכולה להיות בעיה כזו שכל זכרון ששמים בסוף יתפס"

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

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

    מבטיח לעדכן בממצאים.

    דרך אגב,

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

    כאמור נמשיך לעקוב ואעדכן.

    תודה שוב

    יום שלישי 12 נובמבר 2013 11:30
  • מדיניות אבטחת המידע שלכם מרמזת על אבטחה חלשה ולא חזקה. העובדה שיש אנטיוירוס מצביע על אבטחה חלשה. כמובן שאולי אין ברירה מסיבות אחרות כפי שהסברת (כפי שניחשתי כאשר הזכרת את המידע החדש... השרת משמש אתכם גם כ desktop ולא רק כשרת ייעודי).

    בהצלחה,
    נשמח לשמוע עדכון


    [Personal Site] [Blog] [Facebook]signature

    יום שלישי 12 נובמבר 2013 12:30
    מנחה דיון