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

Откуда: Киев
Сообщений: 18
Добрый день !
Есть выборка
SELECT
s.object_id AS objectid,
s.index_id AS indexid,
s.partition_number AS partitionnum,
s.avg_fragmentation_in_percent AS frag,
s.page_count as pagecounts
--INTO #work_to_do
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, 'LIMITED') s
INNER JOIN
( SELECT tc.object_id, tc.index_id
FROM sys.partitions as tc
GROUP BY object_id, index_id
HAVING COUNT(*) > 1
) t ON t.object_id = s.object_id AND t.index_id = s.index_id
WHERE s.avg_fragmentation_in_percent > 10.0 AND s.index_id > 0
Нужно к условию выборке добавить фильтр или др не выбирала файловые группы read-only
Понимаю что инфа находится в таблицах select * from sys.database_files as a
where is_read_only <> 1 но вот мои блондинистые мозги пытались приджойнить к основной выборке но что не получается с результатом . Подскажите плз как сделать правильно ?
Какими другим способом можно сделать ?
14 ноя 13, 17:40    [15130303]     Ответить | Цитировать Сообщить модератору
 Re: Нужны рекомендации по выборке  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
Sveta_dba, джойняцца таблички к файловым группам так (это запрос по распределению места):
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET NOCOUNT ON;

SELECT	
 	t_name = N'[' + s.name + '].[' + t.name + ']'
,	i_name = N'[' + i.name + ']'
,	i_type_desc = i.type_desc
,	au_type_desc = apr.type_desc
,	apr.[partition_number]
,	fg_name = fg.name
,	ps_name = isnull(ps.[name], N'')
,	approx_rows = apr.rows
,	total_mb = apr.total_pages * 8 / 1024.
,	apr.total_pages
,	apr.used_pages
,	apr.data_pages
from
	sys.tables t
INNER JOIN
	sys.schemas s
ON	t.[schema_id] = s.[schema_id]
INNER JOIN
	(	SELECT	_pr.object_id, _pr.index_id, _pr.rows, _au.data_space_id, _pr.[partition_number], _au.type, _au.type_desc, _au.total_pages, _au.used_pages, _au.data_pages
		FROM	
			sys.allocation_units _au
		INNER join
			sys.partitions _pr
		on	_pr.hobt_id = _au.container_id
		and	_au.type IN(1,3)
		UNION ALL
		SELECT	_pr.object_id, _pr.index_id, _pr.rows, _au.data_space_id, _pr.[partition_number], _au.type, _au.type_desc, _au.total_pages, _au.used_pages, _au.data_pages
		FROM	
			sys.allocation_units _au
		INNER JOIN
			sys.partitions _pr
		on	_pr.partition_id = _au.container_id
		and	_au.type = 2
	) as apr
on	t.object_id = apr.object_id
INNER JOIN
	sys.filegroups fg
on	fg.data_space_id = apr.data_space_id
INNER JOIN
	sys.indexes i
on	i.object_id = apr.object_id
and	i.index_id = apr.index_id
left outer join
	sys.[partition_schemes] as ps
on	ps.[data_space_id] = i.[data_space_id]


PS: лучше снять всю sys.dm_db_index_physical_stats, а уже когда надо решать, делать что-нить с нидексом или нет, смореть в какую он файлгруппу входит и прочее.
14 ноя 13, 17:46    [15130332]     Ответить | Цитировать Сообщить модератору
 Re: Нужны рекомендации по выборке  [new]
Sveta_dba
Member

Откуда: Киев
Сообщений: 18
ZOOKABAKODER, Спасибо но немного не так

SELECT
s.object_id AS objectid,
s.index_id AS indexid,
s.partition_number AS partitionnum,
s.avg_fragmentation_in_percent AS frag,
s.page_count as pagecounts
--INTO #work_to_do
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, 'LIMITED') s
INNER JOIN
( SELECT tc.object_id, tc.index_id
FROM sys.partitions as tc
join sys.database_files as tb
on tc.index_id = tb.file_id
where tb.is_read_only < 1

GROUP BY object_id, index_id
HAVING COUNT(*) > 1
) t ON t.object_id = s.object_id AND t.index_id = s.index_id
WHERE s.avg_fragmentation_in_percent > 10.0 AND s.index_id > 0

Запрос не правильный ) я приджойнила
b]join sys.database_files as tb
on tc.index_id = tb.file_id
where tb.is_read_only < 1[/b] понимаю что не корректно как сделать правильно как к существующему запросу приджойнить
инфу файловые группы не в read-only
19 ноя 13, 14:28    [15154703]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить