У мене занадто багато файлів вторинних даних (.ndf), створених для tempdb
. Щоб видалити зайві файли, мені потрібно спорожнити файл (вміст буде переміщено до інших файлів):
DBCC SHRINKFILE('tempdbfile8', EMPTYFILE);
а потім видаліть файл:
ALTER DATABASE tempdb REMOVE FILE tempdbfile8;
Але EMPTYFILE
команда повертає помилку:
DBCC SHRINKFILE: Page 8:41920 could not be moved because it is a work table page.
Msg 2555, Level 16, State 1, Line 2
Cannot move all contents of file "tempdbfile8" to other places to complete the emptyfile operation.
Не хвилюйтесь, мені просто потрібно знайти об’єкт, який використовує цю сторінку, щоб зробити щось із цього:
DBCC TRACEON (3604)
DBCC PAGE(2,8,41920) --dbid=2, fileid=8, pageid=41920
Команда повертає багато інформації, object_id серед них. Але:
Metadata: ObjectId = 0
Я поняття не маю, що з цим робити. Яка кішка перешкоджає переміщенню цієї сторінки? Як знайти цей об’єкт, процес, сеанс чи все, що це таке? Будь-яка допомога буде вдячна, але зауважте, що залишити все як є, чи видалити інший файл замість цього, не є правильним рішенням цієї проблеми;).
Редагувати:
Я видаляю файли, тому що ми дотримувалися "найкращої практики" створення одного файлу на ядро процесора (однаковий початковий розмір, однаковий темп зростання). Але наскільки я знаю, поки у вас не виникнуть проблеми із суперечками, немає сенсу створювати додаткові файли tempdb на тому ж пристрої. У нашому випадку це має сенс, оскільки у нас увімкнено MPIO , а запам'ятовуючий пристрій може обробляти 4 шляхи. Але сталася помилка, і ми закінчили загалом 5 файлів з 6-ядерним процесором. Це більше, ніж шляхи MPIO, менше, ніж ядра CPU, і це не парне число. Це може не спричинити жодних проблем, але просто не здається правильним :).
Нарешті я зміг спорожнити та видалити файл, не перезавантажуючи сервер, встановивши одну з баз даних (на яку я підозрював, що викликала проблему) в єдиний користувальницький режим (негайний відкат). Це спрацювало, але мені пощастило. Те, що я дуже хочу, - це завжди мати можливість відслідковувати сторінку :).
dbcc page ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ])
Про ваше рішення: воно буде працювати, але я дуже хотів би зробити це, не збиваючи примірник.