אינדקסים הם אובייקטים של קבצי מסד נתונים של MS SQL. אלה אובייקטי סכמה פועלים כמו תוכן על קבצי המסד נתונים. משמשים לשיפור פעולות השחזור של נתונים על טבלת מסד נתונים של MS SQL.
עם זמן, הטבלה יכולה להתפצל עקב הכנסת ופעולות עדכון רצופות. גם, כמו שאר האובייקטים, אינדקסים גם ניתנים לפגיעה. אם האינדקסים נפגעים, תוכל לקבל שגיאות כמו:
Table error: table 'Items' (ID 1954106002). Data row does not have a matching index row in the index 'IX_Advertise_BrandCopy_Price_Stock' (ID 69). Possible missing or invalid keys for the index row matching:
Msg 8955, Level 16, State 1, Line 1
Data row (1:11226494:9) identified by (Id = 11078215) with index values 'AdvertiseFlag = 1 and BrandCopyParentId = 0 and NSFPPrice = 137.50 and NSFPQtyInStock = 0 and Id = 11078215'.
Msg 8951, Level 16, State 1, Line 1
כדי לפתור את השגיאות הקשורות לפגיעה באינדקסים או כאשר רמת הפציעה של האינדקסים עולה, ניתן לבנות מחדש או לארגן מחדש את האינדקסים. במאמר זה, נדון בכיצד ל ארגן מחדש ולבנות מחדש את האינדקסים ב-MSSQL Server. נציין גם כלי תיקון בסיס נתונים מתקדם שיכול לשחזר אינדקסים ואובייקטים אחרים מקבצי מסד נתונים שניזום במהירות עם דיוק מלא.
בדיקת אחוז הפציעה של אינדקסים
לפני שתארגן מחדש את האינדקסים, עליך לדעת את האחוז של הפציעה. ניתן להשתמש בפקודה הבאה כדי לבדוק את האחוז של הפציעת האינדקס:
SELECT
OBJECT_NAME(object_id) tableName12,
index_id,
index_type_desc,
avg_fragmentation_in_percent,
page_count
FROM
sys.dm_db_index_physical_stats (
DB_ID('Adventureworks2019'),
OBJECT_ID('[Person].[Person]'),
NULL, NULL, 'DETAILED'
);
ארגון מחדש של אינדקסים בשרת SQL
אם רמת הפציעה של האינדקס היא בין 10 ל-30, מומלץ לארגן מחדש את האינדקס. ניתן להשתמש בקוד הבא ב-T-SQL כדי לארגן מחדש את האינדקס:
ALTER INDEX [PK_Person_BusinessEntityID] ON [Person].[Person]
REORGANIZE;
באפשרותך גם להשתמש ב־SQL Server Management Studio (SSMS) כדי לארגן מחדש את האינדקסים. עקוב אחר השלבים הבאים:
- ב־SSMS, התחבר למופע של ה־SQL Server שלך.
- ב־Object Explorer, הרחב את מסד הנתונים.
- הרחב את תיקיית הטבלאות ואז את תיקיית האינדקסים.
- לחץ ימני על האינדקס שברצונך לארגן מחדש, ואז לחץ על Reorganize.
בניית אינדקסים ב־MS SQL
אם הפיצול הוא גבוה, תוכל לבנות מחדש את האינדקסים. באפשרותך להשתמש בפקודת DBCC DBREINDEX
כדי לבנות מחדש אינדקס. הנה איך לבצע את הפקודה הזו:
DBCC DBREINDEX
(
table_name
[ , index_name [ , fillfactor ] ]
)
[ WITH NO_INFOMSGS ]
פקודה זו אינה תומכת באינדקסים מרחביים ובאינדקסים של עמודות בזיכרון מידע.
בנוסף, באפשרותך להשתמש בפקודת ALTER INDEX
:
ALTER INDEX [PK_Person_BusinessEntityID] ON [Person].[Person]
REBUILD;
באפשרותך גם לבנות מחדש את האינדקסים באמצעות ממשק המשתמש הגרפי ב־SSMS. הנה השלבים:
- ב־SSMS, ב־Object Explorer, הרחב את מסד הנתונים שמכיל את הטבלה שעליה ברצונך לבנות מחדש אינדקס.
- הרחב את תיקיית ה־Tables ואז את הטבלה שעליה ברצונך לבנות מחדש אינדקס.
- הרחב את תיקיית ה־Indexes , לחץ ימני על האינדקס שברצונך לבנות מחדש, ובחר Rebuild.
תקן את מסד הנתונים של SQL Server
אם אריכת סידור או שיקום האינדקסים אינם עובדים, אז ניתן לנסות את הפקודה DBCC CHECKDB
עם האפשרות REPAIR_ALLOW_DATA_LOSS
כדי לתקן את בסיס הנתונים. כך נראה שימוש בפקודה זו:
ראשית, שנה את מצב בסיס הנתונים ל- SINGLE_USER
באמצעות הפקודה שלמטה:
ALTER DATABASE BusinessEntity SET SINGLE_USER
לאחר מכן, הריץ את הפקודה DBCC CHECKDB
כפי שמוצג לתיקון הבסיס שלך:
DBCC CHECKDB (N ’BusinessEntity’, REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS, NO_INFOMSGS;
GO
לאחר התיקון, הגדר את מצב בסיס הנתונים ל- MULTI_USER
על ידי ביצוע הפקודה הבאה:
ALTER DATABASE BusinessEntity SET MULTI_USER
הפקודה DBCC CHECKDB
הנ"ל עשויה לעזור לך לפתור את כל השגיאות שקשורות לפגיעה באינדקסים. היא יכולה לתקן אינדקסים מקובצים ולא מקובצים גם במסדי נתונים של SQL. עם זאת, אין הפקודה הזו מבטיחה שחזרת מידע מלאה ויתכן שתוביל לאובדן מידע. כדי למנוע אובדן מידע, ניתן להשתמש בכלי תיקון MS SQL מקצועיים. הם מעוצבים עם אלגוריתמים מתקדמים לשחזור כל האובייקטים, כולל אינדקסים מקובצים ולא מקובצים, תהליכי אחזור מאוחסנים, טריגרים וכו'.
מסקנה
ניתן להפחית את שברות האינדקס על ידי אריכת סידור או שיקום האינדקס. במאמר זה, הסברנו כיצד לבדוק את אחוז השברות באינדקסים וכיצד לבנות מחדש את האינדקסים.
Source:
https://dzone.com/articles/reorganize-and-rebuild-indexes-in-ms-sql