Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 псевдоснапшот для отчетов  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54264
сам я не местный, работал с Ораклом, потому хочу узнать мнение бывалых

Будет группа отчетов со сложными вычислениями. Отчеты планируется выполнять много раз в день
Решили сложные вычисления перенести в процедуру и формировать промежуточную таблицу (по шедуллеру; скажем, раз в 3 часа, бизнес это устраивает), на основании той таблицы и будут строиться отчеты. Строк в той таблице будет не так чтобы сильно много - скажем, 100 тыщ.

Как правильно формировать эту таблицу, чтобы в момент перезаливки данных отчеты формировались на основании предыдущих?

как-то так?
begin transaction
delete Table;
<много вычислений и 10-20 минут времени>
commit transaction;
не будет это накладно для MS SQL 2012?

Или сделать две таблицы; вторую заполнять этими долгими алгоритмами, а потом ее данными быстро обновлять главную?
3 дек 16, 22:00    [19964078]     Ответить | Цитировать Сообщить модератору
 Re: псевдоснапшот для отчетов  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
andreymx
Или сделать две таблицы; вторую заполнять этими долгими алгоритмами
Да
andreymx
а потом ее данными быстро обновлять главную?
Да. Примерно так:
begin tran;
truncate table TableMain;
alter table TableTemp switch partition 1 to TableMain partition 1;
commit;
3 дек 16, 22:49    [19964284]     Ответить | Цитировать Сообщить модератору
 Re: псевдоснапшот для отчетов  [new]
o-o
Guest
invm
andreymx
Или сделать две таблицы; вторую заполнять этими долгими алгоритмами
Да
andreymx
а потом ее данными быстро обновлять главную?
Да. Примерно так:
begin tran;
truncate table TableMain;
alter table TableTemp switch partition 1 to TableMain partition 1;
commit;

а зачем писать partition 1, если таблица не секционирована?
так еще и warning вылезет.
почему не
alter table TableTemp switch to TableMain;

?
3 дек 16, 23:33    [19964446]     Ответить | Цитировать Сообщить модератору
 Re: псевдоснапшот для отчетов  [new]
iljy
Member

Откуда:
Сообщений: 8711
o-o
почему не
....
?


Потому что

MSDN
SWITCH [ PARTITION source_partition_number_expression ] TO { schema_name ] target_table [ PARTITION target_ partition_number_expression ]
Применимо для следующих объектов: От SQL Server 2008 до SQL Server 2016, База данных SQL V12.
Переключает блок данных одним из следующих способов.
  • Переназначает все табличные данные как секцию в уже существующей секционированной таблице.
  • Переключает секции из одной секционированной таблицы в другую.
  • Переназначает все данные одной секции секционированной таблицы в уже существующую несекционированную таблицу.


  • Для работы с таблицами целиком проще использовать sp_rename
    4 дек 16, 01:36    [19964652]     Ответить | Цитировать Сообщить модератору
     Re: псевдоснапшот для отчетов  [new]
    o-o
    Guest
    iljy
    o-o
    почему не
    ....
    ?


    Потому что

    MSDN
    SWITCH [ PARTITION source_partition_number_expression ] TO { schema_name ] target_table [ PARTITION target_ partition_number_expression ]
    Применимо для следующих объектов: От SQL Server 2008 до SQL Server 2016, База данных SQL V12.
    Переключает блок данных одним из следующих способов.
  • Переназначает все табличные данные как секцию в уже существующей секционированной таблице.
  • Переключает секции из одной секционированной таблицы в другую.
  • Переназначает все данные одной секции секционированной таблицы в уже существующую несекционированную таблицу.


  • Для работы с таблицами целиком проще использовать sp_rename

    Типа как у меня написано, все то же самое, но без partition 1, не переключит?
    У нас вся загрузка на этом построена, все тот же switch, вся разница в warning, который вылезет, если таблица не секционирована и partition указан.
    И не вылезет, если не указан
    4 дек 16, 07:37    [19964735]     Ответить | Цитировать Сообщить модератору
     Re: псевдоснапшот для отчетов  [new]
    iljy
    Member

    Откуда:
    Сообщений: 8711
    o-o,

    MSDN утверждает, что так нельзя (перечислены 3 варианта, когда можно, и должна быть хотя бы одна партиционированная таблица). Но проверка показывает, что такой запрос
    use tempdb
    create table t1 (x int, y int)
    insert t1 values(1,2),(3,4)
    create table t2 (x int, y int)
    alter table t1 switch to t2
    select * from t1
    select * from t2
    go
    drop table t1
    drop table t2
    


    Вполне нормально отрабатывает, так что вы правы, можно.
    4 дек 16, 10:54    [19964875]     Ответить | Цитировать Сообщить модератору
     Re: псевдоснапшот для отчетов  [new]
    invm
    Member

    Откуда: Москва
    Сообщений: 9397
    o-o
    а зачем писать partition 1, если таблица не секционирована?
    Привычка :)
    4 дек 16, 11:06    [19964884]     Ответить | Цитировать Сообщить модератору
     Re: псевдоснапшот для отчетов  [new]
    andreymx
    Member

    Откуда: Запорожье
    Сообщений: 54264
    Коллеги,
    продолжаю задавать вопросы по своей задаче (думаю, новый топик не нужен, но могу создать)

    Как обеспечить repeatable read? Отчет будет состоять из нескольких десятков запросов, и все они должны будут читать одни и те же данные независимо от того, было ли между запросами обновление таблицы (alter table t1 switch to t2) или не было
    4 дек 16, 12:04    [19964952]     Ответить | Цитировать Сообщить модератору
     Re: псевдоснапшот для отчетов  [new]
    iljy
    Member

    Откуда:
    Сообщений: 8711
    andreymx,

    эмммм...... SET TRANSACTION ISOLATION LEVEL REPEATABLE READ ? Ну или включить для базы ALLOW_SNAPSHOT_ISOLATION и использовать SNAPSHOT
    4 дек 16, 12:26    [19964985]     Ответить | Цитировать Сообщить модератору
     Re: псевдоснапшот для отчетов  [new]
    andreymx
    Member

    Откуда: Запорожье
    Сообщений: 54264
    iljy,

    спасибо, будем копать
    4 дек 16, 12:27    [19964987]     Ответить | Цитировать Сообщить модератору
     Re: псевдоснапшот для отчетов  [new]
    andreymx
    Member

    Откуда: Запорожье
    Сообщений: 54264
    а как с таким уровнем изоляции, времянки будут формироваться?
    4 дек 16, 14:47    [19965122]     Ответить | Цитировать Сообщить модератору
     Re: псевдоснапшот для отчетов  [new]
    iljy
    Member

    Откуда:
    Сообщений: 8711
    andreymx
    а как с таким уровнем изоляции, времянки будут формироваться?


    Как обычно будут формироваться. А откуда вопрос-то?
    4 дек 16, 14:54    [19965137]     Ответить | Цитировать Сообщить модератору
     Re: псевдоснапшот для отчетов  [new]
    andreymx
    Member

    Откуда: Запорожье
    Сообщений: 54264
    iljy
    andreymx
    а как с таким уровнем изоляции, времянки будут формироваться?


    Как обычно будут формироваться. А откуда вопрос-то?
    SET TRANSACTION ISOLATION LEVEL REPEATABLE READ действует на все таблицы?
    если времянка в это время будет наполняться, на нее REPEATABLE READ как будет действовать?
    4 дек 16, 15:02    [19965150]     Ответить | Цитировать Сообщить модератору
     Re: псевдоснапшот для отчетов  [new]
    Var79
    Member

    Откуда:
    Сообщений: 890
    andreymx,

    есть временные таблицы с # и с ##
    первые живут пока живо соединение
    4 дек 16, 16:45    [19965332]     Ответить | Цитировать Сообщить модератору
     Re: псевдоснапшот для отчетов  [new]
    Var79
    Member

    Откуда:
    Сообщений: 890
    область видимости = connection
    4 дек 16, 16:46    [19965335]     Ответить | Цитировать Сообщить модератору
     Re: псевдоснапшот для отчетов  [new]
    andreymx
    Member

    Откуда: Запорожье
    Сообщений: 54264
    Var79
    andreymx,
    есть временные таблицы с # и с ##
    первые живут пока живо соединение

    Var79
    область видимости = connection
    спасибо, мне кажется, что это мне уже почти понятно

    Мне непонятно, как на них действует SET TRANSACTION ISOLATION LEVEL REPEATABLE Read
    4 дек 16, 17:08    [19965376]     Ответить | Цитировать Сообщить модератору
     Re: псевдоснапшот для отчетов  [new]
    iljy
    Member

    Откуда:
    Сообщений: 8711
    andreymx,

    следите за руками. Локальные временные таблицы живут в одном соединении, для других соединений они не доступны никаким образом. Внимание, вопрос! Как на локальную таблицу одного соединения воздействуют команды другого соединения, если ветер восточный, а играем 7 бубей?
    4 дек 16, 19:22    [19965639]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить