SQL Server: получить общее количество в час на таблицу - PullRequest
0 голосов
/ 11 мая 2018

Есть ли запрос, по которому можно получить общее количество данных, добавленных в таблицу за последние 24 часа?Например, таблица A получила 25000 данных за последние 24 часа.Раньше было 1 миллион данных.Теперь, включая последние 24 часа, он имеет 1 миллион и 250 тысяч данных.

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

SELECT t.name as TableName, i.rows as TotalCount
FROM sys.tables as t 
    JOIN sys.sysindexes as i 
ON t.object_id = i.id 
WHERE indid IN (0,1) 
ORDER BY i.rows DESC, t.name

Заранее спасибо!

Ответы [ 4 ]

0 голосов
/ 11 мая 2018

Прошло много времени с тех пор, как я это сделал, но вы можете запросить журнал транзакций, используя sys.fn_dblog.ПРИМЕЧАНИЕ. Это основано на ограничениях, которые вы описали ... было бы намного лучше использовать таблицу аудита и триггер.

В зависимости от того, когда обрезанный транзакционный_лог, вы можете сделать то, что пытаетесь сделать, с чем-то вроде следующего:

SELECT
 [Current LSN],
 [Transaction ID],
 [Operation],
  [Transaction Name],
 [CONTEXT],
 [AllocUnitName],
 [Page ID],
 [Slot ID],
 [Begin Time],
 [End Time],
 [Number of Locks],
 [Lock Information]
FROM sys.fn_dblog(NULL,NULL)
WHERE Operation IN 
   ('LOP_INSERT_ROWS','LOP_BEGIN_XACT','LOP_COMMIT_XACT') 

Каждая транзакция вставки будет иметь связанную строку для операции'LOP_BEGIN_XACT' и 'LOP_COMMIT_XACT', и будет иметь одну или несколько строк для операции 'LOP_INSERT_ROWS'.Если вы присоединитесь к связанным строкам в [ID транзакции], то вы можете отфильтровать дату начала в [Время начала].

Имейте в виду, что после обрезания журнала все ставки отключены, поэтому это может не произойти.быть полезным для вас.

Небольшая справка по журналам транзакций: ссылка .

0 голосов
/ 11 мая 2018

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

0 голосов
/ 11 мая 2018

Нет способа получить эту информацию, если вы не внедрили механизм регистрации / отслеживания.У вас есть следующие опции для реализации:

  • Добавить столбец даты и времени, который будет датой вставки (по умолчанию GETDATE()).Используйте этот столбец для подсчета строк между определенным диапазоном дат.
  • Добавьте триггер после вставки в таблицу, который либо вставляет строку с текущей датой-временем в таблицу журнала, либо увеличивает дневной или периодический счетчик.
  • Запланируйте процесс, который подсчитывает общее количество записей и сравнивает их с предыдущими подсчетами, чтобы вычислить разницу (или просто записать общую сумму).
  • Использовать модуль CDC (Change Data Capture) более новых версий SQL Server.
0 голосов
/ 11 мая 2018

Я сомневаюсь, есть ли какая-либо встроенная функция или запрос SQL. Вы можете добиться этого, добавив столбец даты и времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...