PDA

View Full Version : Disable شدن Index در sql2005



samiraamiri
چهارشنبه 09 خرداد 1386, 08:44 صبح
با سلام
بعد از upgrade کردن بانک از 2000 به 2005 index های بانک Disable شده چه طور می شه indexها رو فعال کرد؟

azmoodeh
چهارشنبه 09 خرداد 1386, 08:57 صبح
سلام



USE YourDBName;
GO
ALTER INDEX YourIndexName ON YourObject(for ex a table)
REBUILD;
GO




اطلاعات بیشتر

http://technet.microsoft.com/en-us/library/ms188388.aspx
موفق باشید

AminSobati
چهارشنبه 09 خرداد 1386, 09:01 صبح
دوست عزیزم،
برای یک جدول خاص به این روش عمل کنین:


alter index all on mytable rebuild


برای تمام جداول:


exec sp_MsFOrEachTable 'alter index all on ? rebuild'

اگر حجم دیتابیس زیاد باشه، دستور فوق میتونه زمان قابل توجهی صرف کنه

samiraamiri
چهارشنبه 09 خرداد 1386, 09:28 صبح
Change Index ها disable شده . وجود داره و خود Index فعال هست اما توی query ها ازش استفاده نمی کنه و و قتی که از index هم script می سازیم به جای Create table براش Alter می سازه خواستیم Index ها رو drop کنیم و بعد insert ولی چون تمام Index هایی که Upgrade شدن این بلا سرشون اومده حتی اون هایی که Perimery key هستند نمی شه اون هارو تا وقتی Relation دارند Drop کرد(امیدوارم تونسته باشم منظورم رو درست رسونده باشم) با تشکر

Kamyar.Kimiyabeigi
چهارشنبه 09 خرداد 1386, 09:35 صبح
جناب آقای ثباتی عزیز میشه در مورد sp_MsFOrEachTable بیشتر توضیح بدین چون من تو BOL 2000 & 2005 جستجو کردم ولی چیزی پیدا نکردم

samiraamiri
چهارشنبه 09 خرداد 1386, 10:35 صبح
کسی نمی دونه من باید چی کار کنم؟ وقتی properties یک Index رو انتخاب می کنم تمام property هاش غیر فعاله ولی خود index فعاله
کارم فوریه اگه کسی می دونه لطف کنه زودتر جواب بده
با تشکر

AminSobati
چهارشنبه 09 خرداد 1386, 12:27 عصر
من تصور میکنم شما چند مطلب رو با هم ترکیب کردین!
- اول بفرمایید که به چه شکل متوجه میشین از ایندکس در Query استفاده میشه یا خیر؟ آیا Exec Planها رو بررسی کردین؟

- حتی اگر بر مبنای Exec Planها نتیجه گیری کرده باشین باز هم ملاک نیست، چون این بستگی به تصمیم Query Optimizer داره که از ایندکس خاصی استفاده کنه یا خیر.
در 2005 شیوه عملکرد Query Optimizer متفاوت از 2000 هستش و برای انتخاب ایندکس مناسب استراتژی دیگه ای داره.

- منظور شما از "Change Index ها disable شده" دقیقا چیه؟ چون من چیزی به اسم Change Index در SQL Server نمیشناسم.

- دستوری که براتون نوشتم رو آزمایش کردین؟

AminSobati
چهارشنبه 09 خرداد 1386, 12:29 عصر
جناب آقای ثباتی عزیز میشه در مورد sp_MsFOrEachTable بیشتر توضیح بدین چون من تو BOL 2000 & 2005 جستجو کردم ولی چیزی پیدا نکردم

کامیار جان این یک پروسیجر undocumented هستش. به ازای هر جدولی که در دیتابیس باشه، دستور شما رو اجرا میکنه. نام جدول به صورت خودکار جای علامت سوال قرار میگیره.
این هم سورسش:


exec sp_HelpText 'sp_MsFOrEachTable'

samiraamiri
چهارشنبه 09 خرداد 1386, 15:03 عصر
با سلام
بله آقای ثباتی Exec Plan رو چک کرده ایم و Query Optimizer هم Table Scan می کند. من برای اینکه بهتر متوجه مشکل ما بشید می گم که برای یک table که یک Index از 2000 داره ( و همونطور که گفتم وقتی از index ها properties می گیرم تمام آیتم هاش غیر فعاله ) یه index جدید ایجاد کردم و ُscript دو تا index رو ساختم (Create script)
کد ساخته شده برای index جدید:

CREATE NONCLUSTERED INDEX [IX_Source_3] ON [dbo].[Source]
(
[fkResourceCustomGroup] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

کد ساخته شده برای index قبلی:


ALTER TABLE [dbo].[Source] ADD CONSTRAINT [IX_Source] UNIQUE NONCLUSTERED
(
[fldSourceName] ASC,
[fldProject] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 15) ON [PRIMARY]
حالا ما فکر می کنیم که کندی ایجاد شده برای بانکمون از همین جا ناشی می شه این که از Index ها صرف نظر می کنه
در ضمن باید بگم که index قدیمی رو حتی drop هم نمی کنه

AminSobati
چهارشنبه 09 خرداد 1386, 16:19 عصر
بالاخره نگفتین کدی که براتون گذاشتم رو اجرا کردین یا نه!
ضمنا یک کد هم اینجا دارم که بعد از دستور قبلی، اجراش کنین:
http://www.sqlsolutions.ir/gam.txt

Kamyar.Kimiyabeigi
یک شنبه 13 خرداد 1386, 16:01 عصر
جناب آقای ثباتی عزیز طریقه استفاده از sp_MSforeachtable به روش زیر درسته ؟


sp_MSforeachtable @command1="print '?' dbcc checktable ('?')"

AminSobati
یک شنبه 13 خرداد 1386, 22:50 عصر
کامیار جان مگه مشکلی داشتی شما با این حالت

Kamyar.Kimiyabeigi
چهارشنبه 16 خرداد 1386, 08:34 صبح
کامیار جان مگه مشکلی داشتی شما با این حالت

با اون کد قبلی که شما نوشته بودین مشکل داشتم (Error میداد). میخواستم بدونم اون کدی که نوشتم درسته؟

AminSobati
چهارشنبه 16 خرداد 1386, 22:22 عصر
کد شما رو من اجرا کردم و درست بود