Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как отмониторить select?  [new]
Большой Сестра
Guest
Здравствуйте, ребята!
Поделитесь, как можно решить задачку мониторинга доступа к таблицам базы посредством select. Это нужно для того, чтоб за определенное кол-во минут или месяцев отсечь все используемые таблицы (те, к которым были обращения на чтение данных) и акцентировать внимание на неиспользуемых с целью избавления базы от мусора.
29 апр 15, 16:45    [17582524]     Ответить | Цитировать Сообщить модератору
 Re: Как отмониторить select?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
Большой Сестра
Поделитесь, как можно решить задачку мониторинга доступа к таблицам базы посредством select. Это нужно для того, чтоб за определенное кол-во минут или месяцев отсечь все используемые таблицы (те, к которым были обращения на чтение данных) и акцентировать внимание на неиспользуемых с целью избавления базы от мусора.
Мониторить можно только с помощью трейса, что довольно сложно из за большого объёма (нужно ведь записывать и вхождения внутрь процедур, функций и триггеров)

Вам лучше анализировать кеши планов запросов - если там не появилась таблица, значит, не использовалась.
Покопайтесь в sys.dm_exec_*
29 апр 15, 17:01    [17582659]     Ответить | Цитировать Сообщить модератору
 Re: Как отмониторить select?  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Как насчет такого варианта - смотреть насколько часто SQL Server обращается к индексам при выполнении запросов? Если у конкретной таблицы по нулям user_seeks, user_scans, user_lookups - значит чтений из таблицы нет, user_updates - обновлений данных.

SELECT i.name, SCHEMA_NAME(o.[schema_id]) + '.' + o.name, t.user_seeks, t.user_scans, t.user_lookups, t.user_updates, t.last_action
FROM (	
	SELECT *
		, last_action = (
				SELECT MAX(last_action)
				FROM (VALUES (last_user_seek), (last_user_scan), (last_user_lookup), (last_user_update)) t(last_action)
			)
	FROM sys.dm_db_index_usage_stats
	WHERE database_id = DB_ID()
) t
JOIN sys.objects o ON o.[object_id] = t.[object_id]
JOIN sys.indexes i ON i.index_id = t.index_id AND t.[object_id] = i.[object_id]
WHERE o.[type] = 'U'
ORDER BY
	  i.[object_id]
	, i.index_id
29 апр 15, 17:02    [17582666]     Ответить | Цитировать Сообщить модератору
 Re: Как отмониторить select?  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
AlanDenton, добавлю, что данные хранятся с момента перезапуска сервера, т.е. если сервис SQL Server рестартовался недавно, то данные из этой вьюхи собирать бесполезно.
29 апр 15, 17:06    [17582695]     Ответить | Цитировать Сообщить модератору
 Re: Как отмониторить select?  [new]
o-o
Guest
alexeyvg
Мониторить можно только с помощью трейса

не, ну в Enterprise Edition 2008 и дальше уже есть DATABASE AUDIT.
29 апр 15, 17:06    [17582700]     Ответить | Цитировать Сообщить модератору
 Re: Как отмониторить select?  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Minamoto, это я знал. Тем не менее спасибо за Ваш комментарий. Его было не лишним упомянуть.

А вообще было бы интересно услышать альтернативные варианты решения данной задачи. Заранее спасибо.
29 апр 15, 17:07    [17582705]     Ответить | Цитировать Сообщить модератору
 Re: Как отмониторить select?  [new]
o-o
Guest
с картинками:
Auditing SELECT statements in SQL Server 2008

добавлю, что SERVER AUDIT уже доступен с 2012-ого и в остальных редакциях,
но DATABASE AUDIT так и жмотят
29 апр 15, 17:13    [17582747]     Ответить | Цитировать Сообщить модератору
 Re: Как отмониторить select?  [new]
komrad
Member

Откуда:
Сообщений: 5252
AlanDenton
Minamoto, это я знал. Тем не менее спасибо за Ваш комментарий. Его было не лишним упомянуть.

А вообще было бы интересно услышать альтернативные варианты решения данной задачи. Заранее спасибо.


ну раз предложили уже проверить кэш запросов, тогда в догонку - проверить кэш данных: если таблица селектилась, то данные из нее в кэше должны побывать
29 апр 15, 17:42    [17582925]     Ответить | Цитировать Сообщить модератору
 Re: Как отмониторить select?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
komrad, в каждой таблице создайте хотя бы один индекс. Система мониторит обращения к индексам. Об это выше написано.
29 апр 15, 18:14    [17583081]     Ответить | Цитировать Сообщить модератору
 Re: Как отмониторить select?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
PS и к куче тоже мониторит при наличии индекса.
29 апр 15, 18:15    [17583083]     Ответить | Цитировать Сообщить модератору
 Re: Как отмониторить select?  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Владислав Колосов, более того, даже при отсутствии индекса тоже мониторит.
29 апр 15, 18:25    [17583117]     Ответить | Цитировать Сообщить модератору
 Re: Как отмониторить select?  [new]
komrad
Member

Откуда:
Сообщений: 5252
Владислав Колосов
komrad, в каждой таблице создайте хотя бы один индекс. Система мониторит обращения к индексам. Об это выше написано.

не буду я ничего создавать :) куча у меня, by design
и вообще, индексы - это хорошо, но они не центр вселенной
так что замыкаться на index_usage_stats не рекомендую
29 апр 15, 23:15    [17584121]     Ответить | Цитировать Сообщить модератору
 Re: Как отмониторить select?  [new]
o-o
Guest
Большой Сестра
нужно для того, чтоб за определенное кол-во минут или месяцев отсечь все используемые таблицы (те, к которым были обращения на чтение данных) и акцентировать внимание на неиспользуемых с целью избавления базы от мусора.

да вообще же стандартно такое решается:
переименованием/переносом в другую схему.
рано или поздно за нужными прибегут
29 апр 15, 23:50    [17584221]     Ответить | Цитировать Сообщить модератору
 Re: Как отмониторить select?  [new]
pima456
Guest
o-o
да вообще же стандартно такое решается:
переименованием/переносом в другую схему.
рано или поздно за нужными прибегут

А еще бы при этом не огрести бы Для этого и мониторинг )
30 апр 15, 12:52    [17586559]     Ответить | Цитировать Сообщить модератору
 Re: Как отмониторить select?  [new]
o-o
Guest
pima456,

ну так правильно сказали про sys.dm_db_index_usage_stats,
уже все есть даром (и для куч тоже),
слепок сего в таблицу, вывести ее красиво в отчет,
приложить дату последнего рестарта сервера,
начальству на подпись типа с такого-то числа только это использовалось,
остальное разрешите переименовать.
кто подписал, тот и крайний, а если он говорит "нет", взять справку "нет" тоже с подписью,
и делать ничего не надо
30 апр 15, 13:13    [17586720]     Ответить | Цитировать Сообщить модератору
 Re: Как отмониторить select?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Чтобы не копился мусор, мы создали "мусорную" схему для экспериментов и временных данных, которую чистит примитивный job.
30 апр 15, 13:20    [17586779]     Ответить | Цитировать Сообщить модератору
 Re: Как отмониторить select?  [new]
Zukora
Member

Откуда:
Сообщений: 535
Делаем бекап, удаляем таблицу, ждем. Если прибежали с "а у нас, а там, а оно кааак!" - то, пля, это не мусор, восстанавливаем. Не прибежали - точно мусор. Это же куда забавнее, чем делать скучную схему базы.
30 апр 15, 14:34    [17587332]     Ответить | Цитировать Сообщить модератору
 Re: Как отмониторить select?  [new]
Большой Сестра
Guest
Спасибо за советы! Есть над чем покумекать.
30 апр 15, 17:39    [17588504]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить