Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Создание генерируемого айдишника  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Создание генерируемого айдишника  [new]
aleks222
Member

Откуда:
Сообщений: 952
Ежели твоя процедура ОДНА и выполняется раз в сутки без конкуренции - пофиг как ты будешь генерировать SESSION_ID.
17 янв 19, 16:00    [21788071]     Ответить | Цитировать Сообщить модератору
 Re: Создание генерируемого айдишника  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
А как на счет нормализации? Дата — это свойство сессии?
18 янв 19, 21:09    [21789098]     Ответить | Цитировать Сообщить модератору
 Re: Создание генерируемого айдишника  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 773
plorkie
Подскажите, как лучше и эффективней.
Ниже пример процедуры:

DECLARE @SESSION_ID AS BIGINT;
SET @SESSION_ID = (SELECT MAX(session_id)+1 AS SESSION_ID FROM DLA.schema_status);




Как по мне, то как приведено в примере - так делать не надо. В твоей ситуации надо либо определять поле SESSION_ID как identity либо, если версия SQL 2012 и выше, использовать sequence. В любом случае это лучше чем постоянно дергать таблицу. Кстати, а сбор статистики изменений с какой частотой работать будет? Раз в день? А если попросят тебя динамику в пиковые часы и в часы минимальной нагрузки на протяжении недели показать и сравнить то сбор статистики раз в день не поможет, чаще придется собирать.
20 янв 19, 23:32    [21789884]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить