Команди утиліти DBCC

Для обслуговування SQL Server компанія Microsoft пропонує утиліту DBCC, яка налічує тридцять чотири команди

У першу чергу варто ознайомитися з командою help, яка виводить на екран синтаксис всіх доступних в утиліті DBCC команд

DBCC Help (CheckDB)

Буде отримано наступний результат:

CheckDB [(імя_ б а зи_да інших

[, NOINDEX | REPAIR])]

[WITH NO_INFOMSGS[, ALL_ERRORMSGS]

[, PHY SI CAL__ONL Y ]

[, ESTIMATEONLY] [, TABLOCK]]

DBCC execution completed If DBCC printed error messages,contact your system administrator

Всі команди утиліти DBCC виводять інформацію про виконувані діях і виявлені помилки, після чого пропонують користувачеві звернутися зі списком помилок до системного адміністратора Якщо ви вважаєте себе професіоналом, то краще вас з даною утилітою ніхто не впорається

Для підтримки зворотної сумісності з попередніми версіями сервера в утиліту dbcc було включено кілька застарілих команд, які в цій главі ми розглядати не будемо Наприклад, команда dbcc rowlock більше не використовується, оскільки SQL Server 2005 виконує блокування рядків автоматично

Повний список застарілих команд утиліти DBCC, в тому числі підтримуваних у новій версії сервера баз даних, ви знайдете за адресою:

http://msdn2microsoftcom/en-US/library/msl44262aspx

Перевірка цілісності бази даних

Команда DBCC CheckDB виконує серію перевірок цілісності внутрішньої структури бази даних Коректність фізичної структури виключно важлива для правильного функціонування бази даних Ця команда виконує перевірку таких обєктів, як покажчики індексів, зміщення сторінок даних, звязки між сторінками індексів і даних, а також структури сторінок індексів і даних Якщо в результаті збою живлення будь-яка сторінка бази даних була записана тільки наполовину, то кращим засобом виявлення і усунення помилки буде команда DBCC CheckDB Як приклад перевіримо цілісність навчальної бази даних OBXKites:

DBCC CheckDB (OBXKites)

Буде отримано наступний результат (наводиться зі скороченнями):

DBCC results for OBXKites.

DBCC results for sysobjects.

There are 114 rows in 2 pages for object sysobjects.

DBCC results for sysindexes.

There are 77 rows in 3 pages for object sysindexes.

DBCC results for ProductCategory.

There are 8 rows in 1 pages for object ProductCategory.

DBCC results for Product.

There are 55 rows in 1 pages for object Product.

CHECKDB found 0 allocation errors

and 0 consistency errors in database OBXKites.

DBCC execution completed If DBCC printed error messages, contact your system administrator

Отриманий вами результат може відрізнятися від наведеного в книзі Всі На замітку залежить від конфігурації сервера і тих змін, які були внесені в базу даних

За допомогою двох параметрів – all_errormsgs і no_inf omsgs – можна задати необхідний рівень деталізації інформаційних повідомлень Параметр estimate_only дозволяє отримати приблизний розмір бази даних tempdb, необхідний для виконання команди CheckDB

Якщо база даних занадто велика, можна скористатися параметром no index і пропустити перевірку цілісності всіх користувальницьких некластерізованних індексів Ще більше часу допоможе заощадити параметр Physical_Only-он виконає тільки саму критичну перевірку фізичної структури сторінок Ви можете скористатися цим параметром, якщо немає часу для повноцінної перевірки бази командою CheckDB або якщо індекси були нещодавно створені

1 Щоб отримати список системних таблиць поточної бази даних, можете виконан-

SVS нитка запРос до поданням каталогу sysobjects, вказавши як фільтра I * вираз type_desc =1 system table 1 Те ж можна зробити і для інших ти-■ пов обєктів, зокрема, для користувача таблиць (user table), різних типів обмежень (primary_key_constraint, default_constraint,

CHECK_CONSTRAINT, UNIQUE_CONSTRAINT І FOREIGN_KEY_CONSTRAINT),

збережених процедур (sql_stored_procedure), тригерів (sql_trigger) і уявлень (view) Ви також відкриєте для себе спеціальні обєкти SQL Server, такі як внутрішні таблиці (internal_table) і службові запити

(SERVICE_QUEUE)

Відтворення бази даних

Якщо при перевірці бази даних були виявлені помилки, утиліта DBCC спробує їх усунути Ця операція відрізняється від звичайної перевірки цілісності, так як база даних повинна бути попередньо переведена в монопольний (тобто на одного користувача) режим за допомогою збереженої процедури sp_dboption Тільки після цього можна буде виконати команду DBCC CheckDB з параметром Repair_Rebuild Не забудьте після перевірки відновити вихідний режим роботи бази даних

Ехес sp_dboption OBXKites, single_user, True;

DBCC CheckDB (OBXKites1, Repair_Rebuild)

GO

EXEC sp_dboption OBXKites, 1Single_user1, False;

GO

Буде отримано наступний результат (наводиться зі скороченнями):

DBCC results for OBXKites.

Service Broker Msg 9675, State 1: Message Types analyzed: 14

Service Broker Msg 9616, State 1: Service Contracts analyzed: 6

Service Broker Msg 9667, State 1: Services analyzed: 3

DBCC results for OrderPriority.

There are 1 rows in 1 pages for object &quotOrderPriority&quot.

DBCC results for Productcategory.

There are 8 rows in 1 pages for object &quotProductcategory&quot.

CHECKDB found 0 allocation errors and 0 consistency errors in database OBXKites.

DBCC execution completed If DBCC printed error messages, contact your system administrator

Утиліта DBCC пропонує три режими відновлення, кожен з яких виконує більш ретельну перевірку, ніж попередній

■ Repair_Fast Найпростіший режим перевірки Відновлює ключі некластері-зовано індексів, але залишає недоторканими сторінки даних

■ Repair_Rebuild Середній рівень перевірки Виконує повну перевірку Некла-стерізованних індексів та індексних покажчиків, але не зачіпає сторінки даних

■ Repair_Allow_Data_Loss Найбільш складна перевірка Відтворює і перебудовує всі індекси разом з покажчиками на сторінки даних, видаляє всі пошкодження, виявлені на сторінках даних Під час оновлення структури сторінок даних можлива часткова втрата інформації

Виконуйте команду dbcc CheckDB щодня і після кожного збою обладнання Якщо буде виявлена ​​яка-небудь помилка, запустіть режим Repair_ Rebuild, щоб спробувати відновити базу даних перед використанням режиму Repair_Allow_Data_Loss, що допускає втрату інформації Якщо ви маєте справу з особливо великими базами даних за наявності вимоги підвищеної доступності, то можете виконувати перевірку раз на тиждень в період зниження активності користувачів

Багатокористувацький режим

У версії SQL Server 2005 стало можливо виконувати команду DBCC CheckDB, не вимагаючи виходу інших користувачів з бази даних Всі процеси будуть розбиті на окремі потоки, що задіють всі доступні процесори Слід зазначити, що команда CheckDB інтенсивно використовує процесор і дискову підсистему З цієї причини запускайте її тоді, коли до бази підключено мінімальне число користувачів

Тепер одночасно з командою dbcc CheckDB ви можете виконувати коман-

Новинка V Ну так DBCC CHECKALLOC, DBCC CHECKTABLE І DBCC CHECKCATALOG

2005 4

Якщо одночасно з виконанням команди DBCC CheckDB з базою даних працюють користувачі, то утиліта DBCC використовує стандартну блокування схеми Параметр TabLock трохи знижує гранулярность блокувань Незважаючи на те що робота команди DBCC CheckDB буде менш ефективною, конкуренція в базі даних стане вище, в результаті чого користувачі зможуть продовжити роботу з нею

DBCC CheckDB (OBXKites) With TabLock

Буде отримано наступний результат (наводиться зі скороченнями):

DBCC results for OBXKites.

DBCC CHECKDB will not check SQL Server catalog or Service Broker consistency because a database snapshot could not be created or because WITH TABLOCK was specified

DBCC results for syssysrowsetcolumns.

There are 654 rows in 6 pages for object &quotsyssysrowsetcolumns&quot.

DBCC results for syssysrowsets.

DBCC results for ProductCategory.

There are 8 rows in 1 pages for object &quotProductCategory&quot.

CHECKDB found 0 allocation errors and 0 consistency errors in database OBXKites.

DBCC execution completed If DBCC printed error messages, contact your system administrator

При використанні параметра TabLock в висновок додається додаткова На замітку рядок DBCC CHECKDB will not check SQL Server catalog or Service Broker consistency because a database snapshot could not be created or because WITH TABLOCK was specified . Це попередження про те, що перевірка каталогу SQL Server і цілісності брокера служб виконуватися не буде, оскільки моментальний знімок бази даних не може бути створений або використаний параметр with tablock Це-чисто інформаційне повідомлення, так що не варто особливо хвилюватися з цього приводу У той же час, коли ви зустрінете це повідомлення, не використовуючи параметр TabLock, перевірте, чи всі необхідні служби запущені

Перевірка на рівні обєктів

Команда DBCC CheckDB виконує комплексну перевірку цілісності структури бази даних У той же час можна виконати і окремі перевірки і при цьому отримати додаткову інформацію про окремі обєкти З цієї причини краще виконувати команду DBCC CheckDB щодня, а спеціалізовані версії, привязані до обєктів, використовувати на етапі налагодження

Якщо база даних вимагає відновлення, завжди використовуйте повноцінну версію CheckDB, не зупиняючись на наступних спеціалізованих командах

■ DBCC CheckAlloc (база_данних) Підмножина команди CheckDB, що перевіряє фізичну структуру бази даних Створюється звіт з високим ступенем деталізації У ньому перераховується кількість екстентів (що займають 64 Кбайт чи вісім сторінок даних) і сторінки даних, які використовуються усіма таблицями та індексами

■ DBCC CheckFileGroup (файлова група) Команда, аналогічна CheckDB, але що перевіряє всього одну задану файлову групу

■ DBCC CheckTable (таблиця) Виконує кілька паралельних перевірок таблиці

■ DBCC CleanTable (база_данних, таблиця) Перерозподіляє простір, звільнене після видалення з таблиці стовпця з типом varchar, nvarchar, text або ntext Фактично ця команда оновлює базу даних вона не включена до складу команди CheckDB, якщо не використовується параметр повного відновлення Виходячи з цього, якщо оновлення тестових полів бази даних виконується регулярно, рекомендується включити цю команду в план щоденного обслуговування бази даних

Цілісність даних

Над шаром фізичної структури бази знаходиться шар даних, перевірка якого виконується за допомогою наступних команд Перераховані нижче три команди DBCC не входять до складу DBCC CheckDB – їх потрібно виконувати окремо

■&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp DBCC CheckCatalog ( 1 база_данних ) Перевірка цілісності системних таблиць бази даних для забезпечення посилальної цілісності таблиць, уявлень, стовпців і типів даних При нормальних умовах звіт не надто деталізований Ця команда не виправляє виявлені помилки Якщо в базі даних будуть виявлені помилки, доведеться за допомогою сценарію заново створити базу або таблицю, після чого перемістити збережені дані зі старої таблиці в нову Якщо помилки не виявлені, то звіт не містить ніякої корисної інформації

■ DBCC CheckConstraints {таблиця, обмеження) Перевірка цілісності зазначеного обмеження або всіх обмежень таблиці Для перевірки обмежень ця команда фактично генерує і виконує запит, після чого виводить звіт про всі виявлені помилки Як і у випадку з командою CheckCatalog, якщо помилки не виявлені, ніякої цінної інформації не виводиться

■&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp DBCC Checkldent ( 1 табліпа ) Перевіряє узгодженість значень стовпця ідентичності заданої таблиці Якщо існує проблема, то для виправлення помилки коригується таке значення стовпця ідентичності Якщо стовпець ідентичності пошкоджений, то його нове значення порушить обмеження унікальності та первинного ключа, після чого нові рядки не зможуть бути вставлені в таблицю

У наступному прикладі продемонстровано використання команди DBCC Checkldent: Use СНА2

DBCC Checkldent (Customer)

Буде отримано наступний результат:

Checking identity information: current identity value 127, current column value 127.

DBCC execution completed If DBCC printed error messages, contact your system administrator

Обслуговування індексів

Індекси є своєрідним мостом між даними і запитом SQL Так як дані постійно вставляються і оновлюються, індекси стають фрагментованими, і статистика розподілу даних втрачає актуальність При цьому ступінь заповнення сторінок далека від ідеалу Обслуговування індексів необхідно для того, щоб виправити ситуацію, що складається і не допустити зниження продуктивності

Фрагментація бази даних

У міру вставки інформації на сторінки даних та індексів сторінки заповнюються на 100% Як тільки досягається цей поріг, SQL Server виконує розбиття сторінки на дві, кожна з яких заповнена приблизно на 50% Незважаючи на те що такий підхід вирішує проблеми, повязані з окремими сторінками, внутрішня структура бази даних стає фрагментованою

Щоб продемонструвати ефект виконання команди DBCC, що впливає на фрагментовані таблиці та індекси, потрібна порівняно велика таблиця У наступному сценарії створюється відповідна таблиця та її некластерізованний індекс Кластеризувати первинним ключем є глобальний унікальний ідентифікатор GUED З цієї причини вставка виконується в різні частини таблиці, що створює першопричину неабиякою фрагментації

USE Tempdb

CREATE TABLE Frag (

FragID UNIQUEIDENTIFIER NOT NULL DEFAULT NewID(),

Coll INT,

Col2 CHAR(200),

Created DATETIME DEFAULT GetDate(),

Modified DATETIME DEFAULT GetDate()

)

ALTER TABLE Frag

ADD CONSTRAINT PK_Frag PRIMARY KEY CLUSTERED (FragID)

CREATE NONCLUSTERED INDEX ix_col ON Frag (Coll)

Запуск наступної збереженої процедури призведе до вставки в таблицю ста тисяч рядків:

CREATE PROC AddlOOK AS

SET nocount on

DECLARE @X INT

SET @X = 0

WHILE @X &lt 100000 BEGIN

INSERT Frag (Coll,Col2)

VALUES (@X, sample data)

SET @X = @X + 1

END

GO

У наступному пакеті ми викликаємо цю збережену процедуру, заповнюючи таблицю Frag (наберіться терпіння, оскільки виконання даного пакета може зайняти кілька хвилин):

EXEC AddlOOK

EXEC AddlOOK

EXEC AddlOOK

EXEC AddlOOK

EXEC AddlOOK

Виконання команди DBCC ShowContig (таблиця, індекс) призведе до створення звіту про фрагментацію і щільності даних заданої таблиці та індексу Маючи в наявності півмільйона рядків, таблиця Frag є досить фрагментованою При цьому велика частина сторінок заповнена тільки наполовину, що і випливає зі звіту:

DBCC ShowContig (frag) WITH ALL_INDEXES

У наступних результатах індекс з номером 1 є первинним кластеризувати ключем, так що він також присутній у звіті, індекс з номером 2 є некластерізованний:

DBCC SHOWCONTIG scanning Frag table..

Table: Frag1 (1227255527) index ID: 1, database ID: 2 TABLE level scan performed

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Pages Scanned   : 22056

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Extents Scanned : 2772

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Extent Switches  : 22055

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Avg Pages per Extent       : 80

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Scan Density [Best Count:Actual Count]          : 1250%

[2757:22056]

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Logical Scan Fragmentation         : 9924%

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Extent Scan Fragmentation                : 1263%

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Avg Bytes Free per Page  : 25420

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Avg Page Density (full) : 6859%

DBCC SHOWCONTIG scanning Frag table..

Table: Frag (1227255527) index ID: 2, database ID: 2 LEAF level scan performed

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Pages Scanned   : 2748

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Extents Scanned : 348

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Extent Switches  : 2721

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Avg Pages per Extent       : 79

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Scan Density [Best Count:Actual Count]          : 1264%

[344:2722]

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Logical Scan Fragmentation         : 9807%

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Extent Scan Fragmentation                : 9914%

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Avg Bytes Free per Page  : 33653

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Avg Page Density (full) : 5842%

DBCC execution completed If DBCC printed error messages, contact your system administrator

Команда DBCC IndexDefrag виконує дефрагментацію сторінок як кластеризованих індексів, так і некластерізованних Вона організовує вузли для підвищення продуктивності, зменшення розмірів індексу і підвищення коефіцієнта заповнення індексних сторінок Її синтаксис наступний:

DBCC IndexDefrag (імя_бази, імя_ та бліци, імя_індексу)

Виконання операції DBCC IndexDefrag аналогічно перебудові індексу, однак має ту перевагу, що дефрагментація розбивається на серію невеликих транзакцій, що дозволяє знизити ймовірність блокування користувачів, що виконують вставку і оновлення даних

Наступні дві команди виконують дефрагментацію обох індексів таблиці Frag: DBCC IndexDefrag (Tempdb, Frag, PK_Frag1)

Ось результат:

Pages Scanned Pages Moved Pages Removed

22033      15194                   6852

Друга команда:

DBCC IndexDefrag (1Tempdb1, 1 Frag, ix_col)

Результат такий:

Pages Scanned Pages Moved Pages Removed

2748        1610                     1134

Тепер за допомогою команди DBCC ShowContig перевіримо результати дефрагментації індексу Як ми бачимо, проблеми логічної фрагментації і наповнення сторінок, створені при вставці півмільйона рядків, були вирішені:

DBCC ShowContig (frag) WITH ALL_INDEXES

DBCC SHOWCONTIG scanning Frag table..

Table: Frag (1227255527) index ID: 1, database ID: 2 TABLE level scan performed

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Pages Scanned   :               152 04

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Extents Scanned :               1915

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Extent Switches :               1925

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Avg Pages per Extent       :               79

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Scan Density [Best Count:Actual Count]         :               9870%

[1901:1926]

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Logical Scan Fragmentation        :              060%

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Extent Scan Fragmentation                :               1525%

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Avg Bytes Free per Page  :               3 89

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Avg Page Density (full) :              9952%

DBCC SHOWCONTIG scanning Frag table..

Table: Frag (1227255527) index ID: 2, database ID: 2 LEAF level scan performed

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Pages Scanned   :               1614

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Extents Scanned :               205

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Extent Switches :               207

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Avg Pages per Extent       :               79

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Scan Density [Best Count:Actual Count]         :               9712%

[202 :208]

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Logical Scan Fragmentation        :              105%

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Extent Scan Fragmentation                :               9902%

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Avg Bytes Free per Page  :               415

-&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Avg Page Density (full) :              9949%

DBCC execution completed If DBCC printed error messages, contact your system administrator

На даний момент в базі даних tempdb накопичилася маса обєктів, які було б непогано видалити за допомогою наступного програмного коду:

DROP TABLE Frag

GO

DROP PROCEDURE AddlOOK

GO

Статистика індексів

Корисність індексу визначається розподілом даних всередині нього Наприклад, якщо 60% замовників живуть у Москві, їх пошук буде швидше виконати шляхом сканування таблиці, а не використання індексу У той же час для пошуку єдиного замовника, який живе в Урюпінську, запитом буде потрібна допомога індексу Оптимізатор запитів приймає в розрахунок статистику індексів і на її основі робить висновки щодо доцільності використання індексів при виконанні конкретного запиту

Статистика відображається в деяких звітах як індекси з іменами, що починаються з _WA_Sys або heed_

Команда DBCC Show_Statistic виводить звіт із зазначенням дати збору статистики У цьому звіті міститься базова статистика індексу, включаючи його корисність Низька щільність вказує на високу вибірковість індексу висока демонструє те, що один вузол індексу вказує на кілька рядків, отже, він менш корисний

У наступному коді продемонстровано використання команди Update Statistics: use cha2

exec sp_help customer

Update Statistics Customer

Системні збережені процедури sp_createstats і sp_updatestats створюють і оновлюють статистику всіх таблиць бази даних

I Щоб побачити операційну статистику індексу, виберіть у динамічному SVS поданні управління sysdm_db_index_operational_stats Також ви ^ I * можете отримати статистику використання за допомогою подання index_ — J usage_stats і фізичну статистику за допомогою sysdm_db_index_physical_ stats Уявлення sysdm_db_index_operational_stats і sysdm_db_ index_physical_stats вимагають надання всіх аргументів або замінюють їх значень null Обовязковими для введення є аргументи ідентифікаторів бази даних, обєкта та індексу, так само як і номер розділу

Щільність індексу

Щільність індексу визначається процентним відношенням числа сторінок індексу, що містять дані Якщо щільність індексу низька, то для отримання доступу до індексованих даними сервера доведеться переглянути більше сторінок Коефіцієнт заповнення визначає відсоток індексних сторінок, що містять дані, після створення або дефрагментації індексу Слід зазначити, що щільність індексу трохи змінюється з кожною операцією вставки, оновлення або видалення

Команда DBCC DbReIndex повністю перебудовує індекс По суті, ця команда є аналогом послідовних операцій видалення та створення індексу, за тим винятком, що вона дає можливість завдання коефіцієнта заповнення На противагу цьому команда DBCC IndexDef rag відновлює вихідну фрагментацію індексу, проте не доводить її до значення заданого коефіцієнта заповнення

Наступна команда відтворює індекси таблиці Frag і встановлює коефіцієнт заповнення в 98%:

Щільність індексу впливає на продуктивність Далі в цій главі ви знайдете більш детальну інформацію, присвячену ефективному плануванню коефіцієнта заповнення індексу

Розмір файлу бази даних

СУБД SQL Server 70 залишила далеко позаду використовувану в попередніх версіях методику виділення простору в файлах з фіксованим розміром, званих пристроями Починаючи з версії 70 дані і журнал транзакцій автоматично збільшуються в розмірах у міру необхідності І все ж управління розмірами файлів входить до складу важливих завдань обслуговування бази даних Без моніторингу та втручання користувача файли даних можуть розростися до небувалих розмірів Управління розмірами файлів здійснюється за допомогою розглянутих далі команд утиліти DBCC

I Для перегляду інформації про розмір файлу бази даних виберіть у дина-SVS номічному поданні управління sysdm_db_f ile_space_usage

Моніторинг розмірів файлів бази даних

Слід постійно відслідковувати три фактори, повязаних з розмірами файлів бази даних: поточний розмір файлів і його гранично допустима величина, кількість вільних позицій усередині файлів і обсяг вільного місця на диску

Поточний і максимальний розміри файлів зберігаються в системній таблиці sys files: SELECT name, size, maxsize from sysfiles

Буде отримано наступний результат: name size maxsize

CHA2               280            -1

CHA2_log 96   268435456

Для визначення частки використовуваного простору у файлі можна скористатися системної збереженої процедурою sp_spaceused Команда DBCC Updateusage гарантує точність інформації про використання простору файлу:

DBCC Updateusage (tempdb)

EXEC sp_spaceused

Результат такоз:

database_name    database_size unallocated space

Tempdb               21056 MB                       7344 MB

reserved data                      index_size unused

138368 KB 122168 KB 14504 KB                      1696 KB

I Щоб переглянути, скільки простору використовувалося в поточній сесії, S VS можна вибрати в динамічному поданні управління sysdm_db_session_ _____ | * space_usage

Для визначення розміру файлу журналу транзакцій і вільного місця в ньому використовується команда DBCC SQLPerf (LogSpace)

Ця команда повертає результат такого вигляду:

Database Name Log Size (MB) Log Space Used (%) Status

master        33671875                   33207657                                   0

tempdb       07421875                    59473682                                   0

model         04921875                   63194443                                   0

OOD          0484375                     72278229                                   0

MS             07421875                   37302631                                   0

DBCC execution completed

If DBCC printed error messages, contact your system administrator

Для моніторингу вільного простору в дискової підсистемі сервера використовується процедура xp_f ixeddrives, що повертає такий результат: drive MB Free

З 429

F          60358

Стиснення бази даних

Якщо база даних не налаштована для автоматичного стиснення у фоновому режимі, то вільний простір, освобождаемое при видаленні невикористовуваних обєктів і рядків, що не повертається операційній системі Файли в даному випадку зберігають максимальний розмір, якого досягли дані Якщо дані постійно додаються і видаляються, регулярне стиск і нарощування розміру файлу буде марною тратою часу Однак якщо дисковий простір являє собою особливу цінність, то після видалення інформації потрібно виконувати ручне стиск файлу даних Стиснення може виконуватися паралельно з будь-якими транзакціями

Використання автоматичного стиснення протягом дня, коли користувачі ак-На замітку тивно працюють з даними, може негативно позначитися на загальній продуктивності Як правило, автоматичне стиснення виконують у неробочий час

Використання команди DBCC ShrinkDatabase дозволяє зменшити розміри файлів бази даних При цьому виконуються дві основні задачі

1 Дані упаковуються на початку файлу, а простір в кінці файлу залишається вільним

2 Вільний простір в кінці файлу обрізається, за рахунок чого зменшується розмір файлу

Управління цими двома діями здійснюється за допомогою параметрів, описаних нижче

■ Параметр notruncate призводить до виконання командою DBCC ShrinkDatabase тільки першої дії – виконується упаковка даних, але розмір файлу не змінюється

■ Параметр t rune at eon ly призводить до обрізання вільного простору в кінці файлу, попередньо не виконуючи упаковку даних

■ Цільовий розмір файлу може бути заданий за допомогою вказівки відсотка вільного простору після стиснення файлу Так як автоматичне збільшення розмірів є досить витратною операцією, корисно залишати деякий обсяг вільного простору Якщо необхідний розмір перевищує доступне простір, то розміри файлу не змінюються

У наступному прикладі виконується стиснення бази даних OBXKites з 10%-ним запасом вільного простору:

DBCC ShrinkDatabase (OBXKites, 10)

Буде отримано наступний результат:

DBCC SHRINKDATABASE: File ID 3 of database ID 12 was skipped because the file does not have enough free space to reclaim

Dbld Fileld CurrentSize MinimumSize UsedPages EstimatedPages

12 1    216                 152                 184                 184

(1 row(s) affected)

DBCC execution completed If DBCC printed error messages, contact your system administrator

Як видно з прикладу, не всі файли мають достатньо місця для перерозподілу Дана команда відображає старі і нові розміри файлів, даючи зрозуміти, які зміни відбулися в базі даних Команда DBCC ShrinkDatabase впливає на всі файли бази даних, в той час як команда DBCC ShrinkFile впливає тільки на файл, вказаний в аргументах

. Додаткова База даних може бути налаштована для автоматичного стиснення фай-інформація лов Докладно про це процесі настройки див в розділі 34

Стиснення журналу транзакцій

При стисканні бази даних разом з нею стискається і журнал транзакцій Використання параметрів notruncate і truncateonly ніяк не відбивається на стисненні журналу транзакцій Якщо існує декілька файлів журналу транзакцій, то SQL Server стискає їх так, ніби вони являють собою єдиний послідовний файл

Найбільш поширеною проблемою, повязаною з журналом транзакцій, є постійне збільшення розміру файлу Причиною такого повороту подій може стати стара відкрита транзакція Журнал транзакцій складається з віртуальних розділів Успіх чи невдача виконання операції стиснення журналу залежить від терміну дії транзакцій у віртуальних розділах і встановлених контрольних точок SQL Server може стискати журнал транзакцій шляхом видалення даних, які старші найдавнішої транзакції в структурі віртуальних журналів

Для перевірки факту існування старих транзакцій в журналі використовується команда DBCC OpenTran:

USE OBXKites

BEGIN TRAN

UPDATE Product

SET ProductDescription = OpenTran

WHERE Code = 1002;

DBCC OpenTran (OBXKites)

Буде отримано наступний результат:

Transaction information for database OBXKites.

Oldest active transaction:

SPID (server process ID): 57

UID (user ID) : -1 Name : user_transaction LSN : (19:524:2)

Start time : Mar 8 2006 4:20:38:890PM SID :

0x010500000000000515000000b4b7cd2267fd7c3043170a32eb030000 DBCC execution completed If DBCC printed error messages, contact your system administrator

На підставі цієї інформації можна відшукати загубилися транзакції, а потім перервати підключення користувача Вузол Current Activity утиліти Management Studio може надати більше інформації про підключення із заданим ідентифікатором Існує ще одне, більш категоричне рішення проблеми – можна зупинити сервер і перезапустити його, після чого виконати стиснення бази даних

Додаткова На розростання журналу транзакцій впливають обрана модель інформація відновлення та порядок резервування журналу Більш детальну інфор-__________________ мацію про цих критичних питаннях см в главі 36

Коли ви знайдете відкриту транзакцію, закрийте її У наступному прикладі підтверджується транзакція і перевіряється, чи існують в базі даних інші відкриті транзакції: COMMIT TRAN

DBCC OpenTran (OBXKites)

Буде отримано наступний результат:

No active open transactions

DBCC execution completed If DBCC printed error messages, contact your system administrator

Додаткові команди утиліти DBCC

Решта сім команд утиліти DBCC використовуються для дозволу проблем, повязаних з тестуванням збережених процедур і тригерів

■ DBCC DropCleanBuf f ers Очищення памяті, зайнятої Буферізірованний даними, щоб вони не впливали на продуктивність запитів під час тестування

■ DBCC Inputbuffer (SPID) Повертає останню інструкцію, виконану клієнтом із заданим ідентифікатором SPID З очевидних причин ця команда може бути виконана тільки членами серверної ролі sysadmin

■ DBCC Outputbuf fer {SPID) Повертає результат останньої інструкції, виконаної клієнтом із заданим ідентифікатором Подібно DBCC Inputbuffer, ця команда може бути виконана виключно членами серверної ролі sysadmin

■ DBCC PinTable (ідентіфікатор_бази, ідентіфікатор_обекта) Закріплює таблицю в памяті Намагайтеся уникати закріплення таблиць в повному обсязі Набагато ефективніше в міру необхідності вивантажувати в кеш окремі сторінки

■ DBCC UnPinTable (ідентіфікатор_бази, ідентіфікатор_обекта) Видаляє таблицю зі списку закріплених у памяті

■ DBCC Р г ос Cache Виводить основну статистику процедурного кешу після того, як запити і процедури скомпільовані і збережені в памяті

■ DBCC CurrencyViolation Дана команда перевіряє, скільки разів досягався межа в редакціях з обмеженим числом підключень

Джерело: Нільсен, Пол Microsoft SQL Server 2005 Біблія користувача : Пер з англ – М: ООО ІД Вільямс , 2008 – 1232 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*