none
מציאת אובייקטים לא בשימוש RRS feed

כל התגובות

  • היי איתי,

    אני אתחיל בשאלה פילוסופית אם הם שם ולא בשימוש מה הם מפריעים לך?  ( חוץ מטבלאות שאני מבין שטבלאות גדולות תופסות מקום ונפח ....)

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

    הפיתוח, עשה את המחיקה בצורה הדרגתית כלומר מחק חכה כמה ימים ככה תדע איזה מפעולות המחיקה גרמו לבעיות אם ישנם - וודא שפעולת שחזור הנתונים מהירה

    ועד כמה שניתן שקופה למשתמשי הקצה.

    הייתי מתחיל בטבלאות :

    1) לפני כל מחיקה היית מגבה את מה שאני מוחק כלל אצבע !!! אם זה טבלה הייתי מגבה אותה לשרת אחר אחר  instance אחר  או מדיה  הייתי רושם לדף אקסל את הטבלה שמחקתי

       ועכשיו לעניין המחיקות :

    שים לב - טבלה שלא מוכנסים אליה נתונים לא אומרת שהיא לא בשימוש!!!!!!! 

    תוכל להשתמש בview הבא כדי לקבל מידע על שימוש בטבלאות:

     sys

     

    .dm_db_index_usage_stats

     אחרי שתבין  טוב טוב מה view זה עושה תוכל להתחיל  לחשוב על  מחיקה של טבלאות.

    view זה נותך לך מידע על השמוש בטבלאות ואינקסים .

    לאחר שמצאת את הטבלאות שאתה  חושב למחוק תרשום אותם בצד באקסל ותפעיל פרופיילר - בהנחה שנתונים נרשמים באמצעות sp  לבסיס הנתונים

     תצטרך לעשות מעקב באמצעות trace מתאים ולבדוק אם נתונים אישהוא נכנסים לטבלאות שמצויות אצלך +  תוכל לבדוק באמצעות trace

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

    מצאתי לך קישור מצויין שתקרא איך לעקוב אחרי SP   בבסיס הנתונים :http://www.sqlservercentral.com/articles/SQL+Server/69676/

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

    בטעות מאחת מהפרצדורות שרצות בבסיס הנתונים:

    SELECT Name

    FROM

     

    sys.procedures

    WHERE

     

    OBJECT_DEFINITION(OBJECT_ID) LIKE '%mail_log%'

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

    בעיקרון הקו המנחה שלך יהיה profiler + ה view  שרשמתי לך.

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

    • הוצע כתשובה על-ידי Assaf_Shalem יום שני 06 דצמבר 2010 07:42
    יום ראשון 05 דצמבר 2010 16:32
  • היי

    עצה נוספת

    במקום למחוק אני בד"כ משנה את שם האובייקט ומוסיף לו "~" בתחילת השם

    אחרי שנה (!!!) אם אף אחד לא צעק כנראה הוא לא בשימוש...

    השימוש הוא לא תמיד ע"י ה SQL עצמו, לפעמים תוכניות משתמשות באופנים שונים באובייקטים לפי ההגיון של מי שכתב את התוכנית

    ולך תדע, יש כל מיני גישות בתיכנות

    שיהיה בהצלחה.

    יום ראשון 05 דצמבר 2010 21:15
  • היי.

    קודם כל תודה, אני משתמש בזה וזה עוזר.

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

    לכן, אולי אני אחדד את הכוונה שלי:

    אני רוצה למצוא אובייקטים שלא נקראים ע"י אובייקטים אחרים ב-DB, כלומר שהם בכלל לא יכולים להיות בשימוש...

    בעיקרון, הייתי יכול לבדוק dependencies אחד מהאובייקטים ב-DB, אבל זה ייקח לי 50 שנה בערך..... 

    אני גם משתמש בשאילתא:

     

    select object_name(id) as object_name_, count(*) as count_ from syscomments where text like '%objectname%' group by object_name(id) order by object_name(id)

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

     

    אני מניח שיש איזשהו סקריפט שבודק את זה, ובטוח שה-dependencies שנראים לאחר קליק ימני על אובייקט נלקחים מאיפשהו....

    אני משתמש גם ב-

    1. SELECT routine_name, routine_type FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_DEFINITION LIKE '%objectname%'

     

    2. SELECT distinct so.id, name, so.Type

    from sys.sysdepends sd

    inner join sys.sysobjects so on so.id = sd.id

    where not exists ( select 1 from sysdepends sd2 where sd2.depid = so.id )

    3. sys.dm_exec_query_stats

     

    אבל אני לא סגור שאחד מהם או שילוב סוגר לי את כל הפינות.

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

     

    שוב תודה, איתי.


    itaigitt
    יום שני 06 דצמבר 2010 08:09