Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Создание генерируемого айдишника / 4 сообщений из 4, страница 1 из 1
17.01.2019, 15:38
    #39760968
plorkie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание генерируемого айдишника
Всем привет!

Нужна помощь.
В общем хочу создать процедуру, которая будет ежедневно выполняться и показывать динамику изменения размера схем в бд.
Данные будут инсертиться в таблицу с полями session_id, schemaname, sizeinmb, date.
Проблема заключается в том, как генерить каждый день новые значения session_id для каждой схемы?
То есть это будет примерно:
Код: plsql
1.
2.
DECLARE @SESSION_ID AS BIGINT;
                  SET @SESSION_ID = (SELECT MAX(session_id)+1 AS SESSION_ID FROM DLA.schema_status) 

?

Или можно попробовать через сиквенс сделать? Подскажите, как лучше и эффективней.
Ниже пример процедуры:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
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
...
Рейтинг: 0 / 0
17.01.2019, 16:00
    #39761003
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание генерируемого айдишника
Ежели твоя процедура ОДНА и выполняется раз в сутки без конкуренции - пофиг как ты будешь генерировать SESSION_ID.
...
Рейтинг: 0 / 0
18.01.2019, 21:09
    #39761747
Mike_za
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание генерируемого айдишника
А как на счет нормализации? Дата — это свойство сессии?
...
Рейтинг: 0 / 0
20.01.2019, 23:32
    #39762164
flexgen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание генерируемого айдишника
plorkieПодскажите, как лучше и эффективней.
Ниже пример процедуры:

Код: sql
1.
2.
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. В любом случае это лучше чем постоянно дергать таблицу. Кстати, а сбор статистики изменений с какой частотой работать будет? Раз в день? А если попросят тебя динамику в пиковые часы и в часы минимальной нагрузки на протяжении недели показать и сравнить то сбор статистики раз в день не поможет, чаще придется собирать.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Создание генерируемого айдишника / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]