Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
plorkie Member Откуда: Сообщений: 31 |
Всем привет! Нужна помощь. В общем хочу создать процедуру, которая будет ежедневно выполняться и показывать динамику изменения размера схем в бд. Данные будут инсертиться в таблицу с полями session_id, schemaname, sizeinmb, date. Проблема заключается в том, как генерить каждый день новые значения session_id для каждой схемы? То есть это будет примерно: DECLARE @SESSION_ID AS BIGINT; SET @SESSION_ID = (SELECT MAX(session_id)+1 AS SESSION_ID FROM DLA.schema_status)? Или можно попробовать через сиквенс сделать? Подскажите, как лучше и эффективней. Ниже пример процедуры: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dla].[schema_status] AS BEGIN DECLARE @SESSION_ID AS BIGINT; SET @SESSION_ID = (SELECT MAX(session_id)+1 AS SESSION_ID FROM DLA.schema_status); INSERT INTO dla.schemastatus WITH (TABLOCK) SELECT @SESSION_ID SESSION_ID, Schemaname Schemaname, SizeInMB SIzeInMB, GETDATE() date FROM( SELECT SCHEMA_NAME(so.schema_id) AS SchemaName ,SUM(ps.reserved_page_count) * 8.0 / 1024 AS SizeInMB FROM sys.dm_db_partition_stats ps JOIN sys.indexes i ON i.object_id = ps.object_id AND i.index_id = ps.index_id JOIN sys.objects so ON i.object_id = so.object_id WHERE so.type = 'U' GROUP BY so.schema_id ---ORDER BY OBJECT_SCHEMA_NAME(so.schema_id), SizeInMB |
17 янв 19, 15:38 [21788023] Ответить | Цитировать Сообщить модератору |
aleks222 Member Откуда: Сообщений: 1244 |
Ежели твоя процедура ОДНА и выполняется раз в сутки без конкуренции - пофиг как ты будешь генерировать SESSION_ID. |
17 янв 19, 16:00 [21788071] Ответить | Цитировать Сообщить модератору |
Mike_za Member Откуда: Москва Сообщений: 1176 |
А как на счет нормализации? Дата — это свойство сессии? |
18 янв 19, 21:09 [21789098] Ответить | Цитировать Сообщить модератору |
flexgen Member Откуда: Город на песке Сообщений: 832 |
Как по мне, то как приведено в примере - так делать не надо. В твоей ситуации надо либо определять поле SESSION_ID как identity либо, если версия SQL 2012 и выше, использовать sequence. В любом случае это лучше чем постоянно дергать таблицу. Кстати, а сбор статистики изменений с какой частотой работать будет? Раз в день? А если попросят тебя динамику в пиковые часы и в часы минимальной нагрузки на протяжении недели показать и сравнить то сбор статистики раз в день не поможет, чаще придется собирать. |
||
20 янв 19, 23:32 [21789884] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |