PDA

View Full Version : سوال: گاف در پایگاه داده



mehdibarati
پنج شنبه 11 آذر 1389, 10:00 صبح
سلام
من در زمینه پایگاه داده اطلاعات زیادی ندارم.از جایی شنیده بودم اگه توی یه پایگاه داده که حجم زیادی داره عمل حذف رکورد رو انجام بدیم بعد از مدتی توش گاف ایجاد میشه و سرعتش پایین میاد.میخواستم بدونم این موضوع صحت داره؟

AminSobati
جمعه 12 آذر 1389, 11:07 صبح
سلام دوست عزیزم،
فکر میکنم منظور از گاف، Gap بوده! البته Gap یا Fragmentation حتی در Insert و Update هم میتونه رخ بده. فرضا وقتی یک فیلد به مقدار حجیم تری Update بشه، ممکنه Storage Engine ناچار به نقل مکان اون رکورد بشه. و البته دلایل متنوع زیادی هست...
لذا Rebuild کردن ایندکسها به منظور Defrag هر چند وقت نیاز خواهد بود تا پیوستگی اطلاعات تضمین بشه

m_omrani
دوشنبه 15 آذر 1389, 20:14 عصر
:لبخندساده:

آقاي ثباتي.
چطور مي شه Job اي نوشت که بتونه وضعيت ايندکس ها رو از نظر Fragmentation بررسي کنه و خودش به طور خودکار در صورتي که Fragmentation به درصد خاصي برسه، عمل Rebuild رو انجام بده؟

با تشکر و ارادت

حمیدرضاصادقیان
سه شنبه 16 آذر 1389, 07:37 صبح
:لبخندساده:

آقاي ثباتي.
چطور مي شه Job اي نوشت که بتونه وضعيت ايندکس ها رو از نظر Fragmentation بررسي کنه و خودش به طور خودکار در صورتي که Fragmentation به درصد خاصي برسه، عمل Rebuild رو انجام بده؟

با تشکر و ارادت

سلام.
در لینکهای زیر توضیح داده به با استفاده از dbcc Showcontig میتونید وضعیت Fragmentation ایندکس ها رو پیدا کنید بعد با استفاده از dbcc indexdefrag اونارو مرتب کنید.
اگر در job میخواهید استفاده کنید باید خروجی اون sp رو در متغیرهایی چک کنید که مثلا اگر به شرایط خاصی رسید اون dbcc رو چک کنه. که برای اینکار به نظرم ایجاد یک sp هست که اینکار در اون انجام بشه.

index fragmentation (http://www.sql-server-performance.com/articles/per/index_fragmentation_p1.aspx)
Save Dbcc Showcontig Output into Table (http://blogs.x2line.com/al/archive/2007/06/23/3173.aspx)

m_omrani
سه شنبه 16 آذر 1389, 15:20 عصر
جالب بود. اما گويا اين روش مربوط به SQL 2000 هستش. در SQL 2005 به بعد از sys.dm_db_index_physical_stats هم مي شه استفاده کرد.
اين لينک رو ببينيد:

How to check Fragmentation on SQL Server 2005 (http://blogs.msdn.com/b/jorgepc/archive/2007/12/09/how-to-check-fragmentation-on-sql-server-2005.aspx)

حمیدرضاصادقیان
سه شنبه 16 آذر 1389, 15:50 عصر
درسته. ولی در این نسخه هنوز هم کار میکنه. من در 2008 هم تست کردم جواب داد.ولی با این روش شما هم میشه انجام داد.