#sql #sql-server #tsql
#sql #sql-сервер #tsql
Вопрос:
У меня есть пользователь, сообщающий мне, что некоторые данные в нашем приложении изменились.
Используя этот пример, я выполнил следующий запрос к таблице, которая заполняет данные в приложении:
SELECT OBJECT_NAME(OBJECT_ID) AS TableName,
last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'Mydatabase')
AND OBJECT_ID=OBJECT_ID('mytable')
Я не получаю никаких строк обратно, поэтому, похоже, нет истории данных в таблице, поскольку они были обновлены?
Я запустил
SELECT OBJECT_NAME(OBJECT_ID) AS TableName,
last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'Mydatabase')
и я получил обратно 13 строк, хотя у некоторых из них было null для имени таблицы.
Комментарии:
1. Вы получаете обратно object_id? Возможно ли, что object_id сопоставляется с объектом в другой базе данных или на другом сервере?
Ответ №1:
Первый пункт:
Счетчики инициализируются как пустые при каждом запуске службы SQL Server (MSSQLSERVER). Кроме того, всякий раз, когда база данных отсоединяется или закрывается (например, из-за того, что для параметра AUTO_CLOSE установлено значение ON), все строки, связанные с базой данных, удаляются.
Итак, если ваш сервер был перезапущен или что-то еще, у вас нет статистики.
Второй момент:
Используйте database_id
параметр при вызове OBJECT_NAME
функции:
SELECT OBJECT_NAME(OBJECT_ID, DB_ID( 'Mydatabase')) AS TableName,
last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'Mydatabase')