Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Растёт размер файла данных для одной партиции  [new]
sti
Member

Откуда:
Сообщений: 769
Имеется секционированная таблица, секции разделены по разным файловым группам по одному файлу в файловой группе.
Один из файлов постоянно увеличивается в размере при этом свободного места в файле нет. Количество данных в секции примерно постоянно, но имеется множество операций UPDATE, INSERT, DELETE. Особенно большое количество строк апдейтится, что не есть хорошо, но, к сожалению, этого не избежать пока.

Анализ показывает, что "виновником" является кластерный индекс одной из таблиц, скрипты ниже под спойлером. В таблице имеется поле типа XML. Ожидаемый размер данных грубо подсчитал с помощью Datalength и он в 10 раз меньше фактически занимаемого места. Фрагментация, по-моему, приемлемая. См. ниже под спойлером.

Вопрос. Есть ли у кого идея в чем причина и что собственно делать. REBUILD индекса сделать не могу, версия на позволяет ONLINE. Могу сделать и сделаю REORGANIZE PARTITION.

+ @@version

select @@version

Microsoft SQL Server 2005 - 9.00.5057.00 (X64)
Mar 25 2011 13:33:31
Copyright (c) 1988-2005 Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)


+ Схема партиционирования и структура таблицы

CREATE PARTITION SCHEME [sProduct] AS PARTITION [fnProduct] TO ([fg_Product_1], [fg_Product_2], [fg_Product_3], [fg_Product_4], [fg_Product_5], [fg_Product_6], [fg_Product_7], [fg_Product_OtherData])
GO

CREATE TABLE [dbo].[ProductProperties](
	[ID] [bigint] NOT NULL,
	[PlatformID] [int] NOT NULL,
	[Properties] [xml] NULL,
	[Description] [nvarchar](max) NULL,
 CONSTRAINT [PK_ProductProperties] PRIMARY KEY NONCLUSTERED 
(
	[ID] ASC
) ON [PRIMARY]
) ON [sProduct]([PlatformID])

GO

CREATE UNIQUE CLUSTERED INDEX [CIX_ProductImages_ID_PlatformID] ON [dbo].[ProductProperties]
(
	[ID] ASC,
	[PlatformID] ASC
) ON [sProduct]([PlatformID])
GO



+ Место на диске

DECLARE 
@sch nvarchar(100), 
@tbl nvarchar(100)

SELECT @sch='dbo', @tbl='ProductProperties' 

SELECT 
  OBJECT_SCHEMA_NAME ( obj.object_id , DB_ID() ) as SchName
  ,obj.name as ObjName
  , obj.Type_desc as ObjectType
  , idx.name as IDXName
  ,p.partition_number
  ,p.rows
  , a.total_pages / 128 as [Reserved(Mb)]
  , a.used_pages / 128 as [Used(Mb)]
  , a.data_pages * 8 as data_pages
  ,idx.type_desc
  
FROM sys.objects obj 
JOIN sys.indexes idx ON obj.object_id = idx.object_id
JOIN sys.partitions AS p ON idx.object_id = p.object_id AND idx.index_id = p.index_id
JOIN sys.allocation_units AS a ON p.partition_id = a.container_id          
WHERE 
  OBJECT_NAME(obj.object_id) = @tbl
  AND OBJECT_SCHEMA_NAME (obj.object_id , DB_ID() ) = @sch
  AND p.partition_number = 3


ObjectTypeIDXNamepartition_numberrowsReserved(Mb)Used(Mb)data_pagestype_desc
USER_TABLECIX_ProductImages_ID_PlatformID34344998000CLUSTERED
USER_TABLECIX_ProductImages_ID_PlatformID3434499853747 5373254702712CLUSTERED
USER_TABLECIX_ProductImages_ID_PlatformID343449983693650CLUSTERED



+ Datalength

select SUM(datalength(Properties)/1024.)+SUM(datalength(Description)/1024.) as DL
from dbo.ProductProperties (nolock) where PlatformID=3


4935418.465649


+ DBCC SHOWCONTIG

DBCC SHOWCONTIG ("dbo.ProductProperties",1)

Table: 'ProductProperties' (2082067149); index ID: 1, database ID: 10
TABLE level scan performed.
- Pages Scanned................................: 17823627
- Extents Scanned..............................: 2243115
- Extent Switches..............................: 7007007
- Avg. Pages per Extent........................: 7.9
- Scan Density [Best Count:Actual Count].......: 31.80% [2227954:7007008]
- Logical Scan Fragmentation ..................: 34.55%
- Extent Scan Fragmentation ...................: 15.44%
- Avg. Bytes Free per Page.....................: 1923.0
- Avg. Page Density (full).....................: 76.24%
25 фев 15, 11:32    [17309076]     Ответить | Цитировать Сообщить модератору
 Re: Растёт размер файла данных для одной партиции  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
ALTER TABLE REBUILD
25 фев 15, 12:39    [17309527]     Ответить | Цитировать Сообщить модератору
 Re: Растёт размер файла данных для одной партиции  [new]
sti
Member

Откуда:
Сообщений: 769
Владислав Колосов,

Как уже написал. REBUILD индекса сделать не могу, версия на позволяет ONLINE. А REBUILD OFFLINE остановит все процессы. Т.е. нужно выделять окно для регламентных работ (или как это по русски называется). Не то чтобы невозможно, но непросто.
25 фев 15, 12:54    [17309658]     Ответить | Цитировать Сообщить модератору
 Re: Растёт размер файла данных для одной партиции  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
sti,

я разве написал о rebuild индекса?
25 фев 15, 13:34    [17309994]     Ответить | Цитировать Сообщить модератору
 Re: Растёт размер файла данных для одной партиции  [new]
sti
Member

Откуда:
Сообщений: 769
Владислав Колосов,

SQL 2005 всё ещё.
25 фев 15, 13:53    [17310140]     Ответить | Цитировать Сообщить модератору
 Re: Растёт размер файла данных для одной партиции  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
sti,

там где 'Место на диске' можете добавить еще allocation unit type. Чтобы хоть понимать это у вас там ROW_OVERFLOW или LOB?
25 фев 15, 14:27    [17310376]     Ответить | Цитировать Сообщить модератору
 Re: Растёт размер файла данных для одной партиции  [new]
sti
Member

Откуда:
Сообщений: 769
2 churupaha

SchNameObjNameObjectTypeIDXNamepartition_numberrowsReserved(Mb)Used(Mb)data_pagestype_desctype
dboProductPropertiesUSER_TABLE CIX_ProductImages_ID_PlatformID34345450000CLUSTERED3
dboProductPropertiesUSER_TABLECIX_ProductImages_ID_PlatformID34345450537165352354488688CLUSTERED1
dboProductPropertiesUSER_TABLE CIX_ProductImages_ID_PlatformID34345450373369 0CLUSTERED2
25 фев 15, 14:44    [17310473]     Ответить | Цитировать Сообщить модератору
 Re: Растёт размер файла данных для одной партиции  [new]
sti
Member

Откуда:
Сообщений: 769
1 = In-row data (all data types, except LOB data types)
2 = Large object (LOB) data (text, ntext, image, xml, large value types, and CLR user-defined types)
3 = Row-overflow data
25 фев 15, 14:45    [17310481]     Ответить | Цитировать Сообщить модератору
 Re: Растёт размер файла данных для одной партиции  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
sti,

sti
но имеется множество операций UPDATE, INSERT, DELETE.


почитайте от этого сообщения и до конца

17294822
25 фев 15, 14:55    [17310528]     Ответить | Цитировать Сообщить модератору
 Re: Растёт размер файла данных для одной партиции  [new]
sti
Member

Откуда:
Сообщений: 769
churupaha,

про кучу я знаю, но у меня же кластерный индекс.
25 фев 15, 15:14    [17310654]     Ответить | Цитировать Сообщить модератору
 Re: Растёт размер файла данных для одной партиции  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
sti,

сдается мне там тоже самое будет... и delete и page split'ы останутся после update/rollback... пол=глядите в tran log... как оно там. руки не доходят.
25 фев 15, 15:25    [17310730]     Ответить | Цитировать Сообщить модератору
 Re: Растёт размер файла данных для одной партиции  [new]
o-o
Guest
про rollback подтверждаю, что и при кластерном место оттяпывает и не возвращает.
попробую еще ребилд и в той теме отпишусь.
про "работа с GAM/SGAM/PFS/IAM идет не отдельными ли системными транзакциями"
тоже подтверждаю, не входят они в саму транзакцию
25 фев 15, 15:33    [17310799]     Ответить | Цитировать Сообщить модератору
 Re: Растёт размер файла данных для одной партиции  [new]
sti
Member

Откуда:
Сообщений: 769
Спасибо всем за участие.

Сделал
ALTER INDEX CIX_ProductImages_ID_PlatformID ON dbo.ProductProperties REORGANIZE PARTITION = 3

и заняиое место сократилось до примерно ожидаемых 5,7 Гб

churupaha
поглядите в tran log...

А можно поподробнее? Я посмотрю для других секций. Там хоть и нет таких интенсивных апдейтов, но инсерты и делиты тоже кучей.
25 фев 15, 15:41    [17310862]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить