PDA

View Full Version : بازسازی Index



hamzehsh
چهارشنبه 07 تیر 1391, 11:20 صبح
سلام
من یک دیتابیس روی sql 2000 دارم که حجمش خیلی زیاد شده
حدود 35 گیگ
کل جدولهاش رو نگاه کردم حجم بیشترینش حدود 2 گیگ هست
البته جدول هم حدود 1400 تاداره
مشکل من اینجاست وقتی که کوئری های select با رابطه های زیاد میفرستم
time out expire بهم میده
هر چقدر هم که شرایط جستجو رو زیاد میکنم تاثیری نداره و یا بازه زمانی بهش میدم و کمش میکنم فرقی نداره.
دیتابیس رو هم شرینک کرده ام و simple هست
البته همیشه هم این پیغام رو نمیده ولی این اتفاق زیاد پیش میاد.
فقط هم در جداولی که رکوردهای زیاد دارند این اتفاق میافته.
با چند نفر مشورت کرده ام گفتند که ایندکس ها رو بازسازی کنم
و من نمیدونم چطور میشه اینکارو انجام داد.
آیا به نظر شما مشکل من واقعا ایندکس هست؟
اگر اینه که راه حل چیه.
ممنون

حمیدرضاصادقیان
چهارشنبه 07 تیر 1391, 11:51 صبح
سلام.
دوست عزیز نمیشه برای این موارد یک راهکار کلی ارائه داد.
اولین چیزی که باید بررسی بشه Plan هست که روی Query شما ساخته میشه.
شما وقتی Query رو در Query Analyzer اجرا میکنید گزینه Show Execution Plan و Show statistics رو انتخاب کنید و دستور رو اجرا کنید و نتیجه رو اینجا قرار بدید تا بشه روش بررسی کرد.
برای بازسازی ایندکس ها هم از طریق تعریف یک JOB میتوانید اینکارو بکنید هم با Dbcc dbReindex (http://msdn.microsoft.com/en-us/library/ms181671.aspx).

SReza1
چهارشنبه 07 تیر 1391, 15:47 عصر
سلام
من یک دیتابیس روی sql 2000 دارم که حجمش خیلی زیاد شده
حدود 35 گیگ
کل جدولهاش رو نگاه کردم حجم بیشترینش حدود 2 گیگ هست
البته جدول هم حدود 1400 تاداره
مشکل من اینجاست وقتی که کوئری های select با رابطه های زیاد میفرستم
time out expire بهم میده
هر چقدر هم که شرایط جستجو رو زیاد میکنم تاثیری نداره و یا بازه زمانی بهش میدم و کمش میکنم فرقی نداره.
دیتابیس رو هم شرینک کرده ام و simple هست
البته همیشه هم این پیغام رو نمیده ولی این اتفاق زیاد پیش میاد.
فقط هم در جداولی که رکوردهای زیاد دارند این اتفاق میافته.
با چند نفر مشورت کرده ام گفتند که ایندکس ها رو بازسازی کنم
و من نمیدونم چطور میشه اینکارو انجام داد.
آیا به نظر شما مشکل من واقعا ایندکس هست؟
اگر اینه که راه حل چیه.
ممنون


shirink كردن بانك باعث ميشه كه Indexهاي شما داغون بشه. براي performance اين كار را نكنيد.
اگر حجم بانكتون بالاست بهتره روي هر جدول كه كند هست index ها دوباره بازسازي بشه. اگر از SQL 2008 به بالا استفاده مي‌كني ميتوني به روش زير كل Indexهاي اون جدول را بازسازي كني!!



ALTER INDEX ALL ON YourTable REBUILD WITH (ONLINE = ON)


اگر هم 2000 داراي روي هر table با راست كليك ، All task ->manage index و كليك روي دكمه edit و بعد edit SQL و بعد excecute ميتوني index را بروز كني. ولي سعي كن بيايي روي 2008 R2

hamzehsh
یک شنبه 11 تیر 1391, 16:08 عصر
یعنی خود SQL به صورت خودکار نمیتونه ایندکس ها رو بازسازی کنه؟
چطوری میتونم برای اینکار JOB تعریف کنم؟
البته SQL 2000
سروری که من دارم برای نصب 2008 قدیمه و امکان نصبش نیست.

SReza1
دوشنبه 12 تیر 1391, 08:30 صبح
یعنی خود SQL به صورت خودکار نمیتونه ایندکس ها رو بازسازی کنه؟
چطوری میتونم برای اینکار JOB تعریف کنم؟
البته SQL 2000
سروری که من دارم برای نصب 2008 قدیمه و امکان نصبش نیست.

اگر هم 2000 داراي روي هر table با راست كليك ، All task ->manage index و كليك روي دكمه edit و بعد edit SQL رو ميزني. يك كد SQL بهت ميده. ميتوني يك Job بنويسي و دستور SQL رو توش بنويسي و باقيش معلومه چيه