Существует ли эквивалент «покрытия кода» для баз данных SQL? - PullRequest
5 голосов
/ 07 апреля 2011

У меня есть база данных со многими таблицами, которые используются, и многими таблицами, которые больше не используются. Хотя я мог бы отсортировать каждую таблицу вручную, чтобы увидеть, используются ли они по-прежнему, это была бы громоздкая задача. Существует ли какая-либо программная / скрытая функция, которая может использоваться в базе данных SQL Server / Oracle, которая будет возвращать информацию типа «Таблицы x, y, z не использовались в прошлом месяце» «Таблицы a, b, c использовались 17 времена сегодня "? Или, возможно, способ сортировки таблиц по «Дата последнего изменения / выбора из»?

Или есть лучший способ сделать это? Спасибо

edit: я обнаружил столбец "modify_date" при выполнении "SELECT * FROM sys.tables ORDER BY modify_date desc", но, похоже, он отслеживает только изменения в структуре таблицы, а не в ее содержимом.

Ответы [ 6 ]

6 голосов
/ 07 апреля 2011

замените spt_values на имя интересующей вас таблицы, запрос даст время последнего использования и то, что использовалось

Отсюда: Выяснение, сколько раз таблица используется в специальных вызовах или вызовах процедур в SQL Server 2005 и 2008

SELECT * FROM(SELECT COALESCE(OBJECT_NAME(s2.objectid),'Ad-Hoc') AS ProcName,execution_count,
    (SELECT TOP 1 SUBSTRING(s2.TEXT,statement_start_offset / 2+1 ,
      ( (CASE WHEN statement_end_offset = -1
         THEN (LEN(CONVERT(NVARCHAR(MAX),s2.TEXT)) * 2)
         ELSE statement_end_offset END)  - statement_start_offset) / 2+1))  AS sql_statement,
       last_execution_time
FROM sys.dm_exec_query_stats AS s1
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2 ) x
WHERE sql_statement like '%spt_values%'  -- replace here
AND sql_statement NOT like 'SELECT * FROM(SELECT coalesce(object_name(s2.objectid)%'
ORDER BY execution_count DESC

Имейте в виду, что если вы перезапустите окно, это будет очищено

1 голос
/ 02 мая 2012

В Oracle вы можете использовать ASH (Active Session History), чтобы найти информацию об используемом SQL.Вы также можете выполнить тесты покрытия кода с помощью Иерархического профилировщика, где вы можете найти, какие части хранимых процедур используются или не используются.

Если вам интересно узнать об обновлениях табличных данных, вы также можете использовать DBA_TAB_MODIFICATIONS.Это показывает, сколько вставок, обновлений, удалений сделано в таблице или разделе таблицы.Как только генерируется новая статистика объекта, строка для указанной таблицы удаляется из DBA_TAB_MODIFICATIONS.У вас все еще есть помощь, поскольку вы также можете взглянуть на историю статистики таблиц.Это не показывает ничего о таблицах, которые запрашиваются только.Если вам действительно нужно знать об этом, вы должны использовать ASH.

Обратите внимание, что для доступа к ASH и к истории статистики вам нужна лицензия для диагностики или пакета настройки.(как правило, вы бы хотели этого в любом случае).

0 голосов
/ 14 июня 2017

Инструмент с открытым исходным кодом Эд Эллиотта, SQL Cover , является хорошей ставкой и имеет встроенную поддержку популярного инструмента модульного тестирования, tSQLt.

0 голосов
/ 08 апреля 2011

Еще несколько запросов, которые могут быть полезны для вас.

select * from sys.dm_db_index_usage_stats

select * from sys.dm_db_index_operational_stats(db_id(),NULL,NULL,NULL)

select * from sys.sql_expression_dependencies /*SQL Server 2008 only*/

Разница между тем, что первые 2 отчета DMV хорошо объяснены в этом сообщении в блоге.

0 голосов
/ 07 апреля 2011

Я использую комбинацию статического анализа в метаданных для определения таблиц / столбцов, которые не имеют зависимостей и трассировок времени выполнения в SQL Server, чтобы увидеть, что происходит.

0 голосов
/ 07 апреля 2011

Если вы используете триггер, вы можете обнаружить обновление вставки или удаления в таблице.

Доступ, вероятно, сложнее.

...