Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5 6   вперед  Ctrl      все
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104751
АцкийСкотона
Торможение псевдотаблиц не только не дает мне жить спокойно при доделывании универсального триггера, она так же тормозит остальную базнес-логику в триггере.

Ну это же ваш выбор. Вы привели столько доводов в ответ на все возражения. И столько раз уверяли, что знаете, что делаете.
Что выбрали - то и получили.
21 окт 14, 13:16    [16736235]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
iap
Member

Откуда: Москва
Сообщений: 47157
АцкийСкотона
АДО при апдейте апдейтит ВСЕ записи. :)
Да неужели?!
К тому же, что мешает выполнять свой явный UPDATE?

Что касается логгирования только записей с изменениями,
то этому здесь посвещено столько постов, что как же Вы их не увидели-то?
Я и сам пару десятков раз участвовал...

Да! О порядке вызовов триггеров.
Если есть зависимость от порядка их вызова, то это уже плохой признак.
Но какая, чёрт возьми, разница, в каком по порядку будет выполняться логгирование?!
21 окт 14, 13:16    [16736240]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8962
АцкийСкотона
без тригера 2 сек, с триггером 5 сек, 500к записей 27 полей.
21 окт 14, 13:18    [16736256]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
tarrus
Member

Откуда: Bergen
Сообщений: 831
АцкийСкотона

tarrus
пропущено...

В единообразном коде, хранящемся в системе контроля версий, изменяемом централизованно и единообразно для всех таблиц? Скорее в вашей затее черт ногу сломит.

Попробуйте сначала хотя бы номрально представить себе код, который генерит триггеры, хранящийся в системе контроля версий. :) Потом представьте что у вас изменилось 100-300 таблиц. Потом еще некоторые талбицы объеденились, некоторые разъеденились в новые. И заетм представьте себе как вы будете свой ацкий гениальный генерирующий триггеры код рефакторить. Обязательно мне сообщите сколько времени у вас ушло с сколько ведер слюны вы наплевали.



Я уже давно для всех БД использую SQL Server Database Project и кодо-генерацию. Если вы не знаете как организовать процесс разработки, то открывайте новую тему. Думаю у многих есть чем поделится в этом направлении.
21 окт 14, 13:19    [16736266]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
ART-CODE
Member

Откуда:
Сообщений: 1100
Я хз в какой.

Могу предположить, что речь идет не о вызове нормального, корректного SQL скрипта или процедуры,
а о подключении компонентов типа ADOTable, и его методах.

Тогда да, нужно исправлять интерфейс.
Это совсем не дело в триггерах искать измененные данные.
21 окт 14, 13:23    [16736294]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
АцкийСкотона
Честно сказать не понял. Можно поподробней про этом момент? Там насоклько знаю никакой версионности. Псевдотаблички на самом деле есть одна таблица, содержащая инсертед и делетед записи. Доступ через которые осуществляется через INSERTED\DELETED.


Capacity Planning for tempdb

Version Stores
A version store is a collection of data pages that hold the data rows that are required to support the features that use row versioning. There are two version stores: a common version store and an online-index-build version store. The version stores contain the following:
  • Row versions that are generated by data modification transactions in a database that uses snapshot or read committed using row versioning isolation levels.
  • Row versions that are generated by data modification transactions for features such as: online index operations, Multiple Active Result Sets (MARS), and AFTER triggers.

    The inserted and deleted tables that are used in AFTER triggers are created in tempdb. That is, the rows that are updated or deleted by the trigger are versioned. This includes all of the rows that are modified by the statement that fired the trigger. Rows that are inserted by the trigger are not versioned.
  • 21 окт 14, 13:24    [16736300]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    iap
    Member

    Откуда: Москва
    Сообщений: 47157
    ART-CODE
    Это совсем не дело в триггерах искать измененные данные.
    Это почему же?
    Давно и успешно ищу именно в триггерах.
    Независимо от всяких там клиентов, как и положено.
    21 окт 14, 13:26    [16736322]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    АцкийСкотона
    Member

    Откуда: Чебоксары
    Сообщений: 56
    Ох вы а, да чот заладили выбрал да выбрал. Ну архитектура такая. Ну вот предназначен триггер для выполнения каких то действий, используются при этом инсертед\делетед. Ну не я же придумал скуль а. :)

    Glory
    АцкийСкотона
    Торможение псевдотаблиц не только не дает мне жить спокойно при доделывании универсального триггера, она так же тормозит остальную базнес-логику в триггере.

    Ну это же ваш выбор. Вы привели столько доводов в ответ на все возражения. И столько раз уверяли, что знаете, что делаете.
    Что выбрали - то и получили.

    Это не мой выбор. Это так задумано вообще. Есть таблицы. На них триггера. Люди с таблицами работают. Триггера срабатывают. Чтото там делают... Сэ ля ви же. Я то причом тут?:)


    iap
    АцкийСкотона
    АДО при апдейте апдейтит ВСЕ записи. :)
    Да неужели?!
    К тому же, что мешает выполнять свой явный UPDATE?

    Что касается логгирования только записей с изменениями,
    то этому здесь посвещено столько постов, что как же Вы их не увидели-то?
    Я и сам пару десятков раз участвовал...

    Да! О порядке вызовов триггеров.
    Если есть зависимость от порядка их вызова, то это уже плохой признак.
    Но какая, чёрт возьми, разница, в каком по порядку будет выполняться логгирование?!



    К тому же, что мешает выполнять свой явный UPDATE?
    В клиенте? Вы работали сишарпом к бд хоть раз? Мне сейчас объяснили что датапровайдеры по умолчанию при апдейте поля в датасете апдейтят ВСЕ поля в бд для этой записи. Что бы сделать апдейт только апдейченых(гы), то там надо както заморачиваться еще. Не вдавался в подробности вобщем.


    Что касается логгирования только записей с изменениями,
    то этому здесь посвещено столько постов, что как же Вы их не увидели-то?
    Я и сам пару десятков раз участвовал...

    Да блин. Да не надо мне помощи в логировании. У меня есть отличный механизм. Мне только надо разобраться почему выборка с псевдотаблиц тормозит так. Сколько раз повторить еще?:)


    Если есть зависимость от порядка их вызова, то это уже плохой признак.
    Ничего плохого в этом нет. Либо представьте уж тогда ваш личный плохой пример. На который я наверняка найду что сказать. :)


    Я и сам пару десятков раз участвовал...
    Прошу прощенья за нескромный вопрос. А хоть раз реально помогли вопрошающим? Или как и мне только и говорите что я везде неправ? ;)
    21 окт 14, 13:30    [16736357]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    АцкийСкотона
    Это не мой выбор.

    А кто тут распинался про универсальный триггер ?

    АцкийСкотона
    Мне сейчас объяснили что датапровайдеры по умолчанию при апдейте поля в датасете апдейтят ВСЕ поля в бд для этой записи.

    По-умолчанию - это значит, когда ленивый программист вообще не захотел ничего задать

    АцкийСкотона
    Что бы сделать апдейт только апдейченых(гы), то там надо както заморачиваться еще.

    У вас существует ТЗ ??? Там что так и написано "программируйте, чтобы не надо как-то было заморачиваться" ?
    21 окт 14, 13:35    [16736404]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    АцкийСкотона
    Member

    Откуда: Чебоксары
    Сообщений: 56
    Владислав Колосов
    АцкийСкотона
    без тригера 2 сек, с триггером 5 сек, 500к записей 27 полей.

    А вот это уже конструктивно. Круто! А что именно в триггере выполняется? Так же как и у меня селект из инсертеда?
    Апдейтите все записи в таблице? Поля варчаровские есть кстатьи, гуиды? И у меня 68 полей.


    [/quot]
    Я уже давно для всех БД использую SQL Server Database Project и кодо-генерацию. Если вы не знаете как организовать процесс разработки, то открывайте новую тему. Думаю у многих есть чем поделится в этом направлении.[/quot]
    Спасибо, но думаю в билинге мне кодогенерация не нужна. У нас четкая бизнес-логика. Потребностей в генерации чего-то там особо нет. :)


    ART-CODE
    Я хз в какой.

    Могу предположить, что речь идет не о вызове нормального, корректного SQL скрипта или процедуры,
    а о подключении компонентов типа ADOTable, и его методах.

    Тогда да, нужно исправлять интерфейс.
    Это совсем не дело в триггерах искать измененные данные.

    Ф точку! Но пока мне придется разбираться с этим на уровне БД. Ничего страшного С этим будет разбираться CLRка в отдельных потока. Переживу. :)


    2pkarklin , если вас не затруднит, ткните меня пожалуйста носом в то место статьи, которое надо познать да бы ускорить выборку? :)
    21 окт 14, 13:39    [16736437]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    ART-CODE
    Member

    Откуда:
    Сообщений: 1100
    iap,
    Прошу прощения, небольшая путаница произошла - кто о чем говорил. Вы правы.

    Тут автор уточнил:
    ВСЕ поля в бд для этой записи

    Все, разобрались.
    IF UPDATE(somefield) BEGIN
    
    21 окт 14, 13:40    [16736452]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    АцкийСкотона
    если вас не затруднит, ткните меня пожалуйста носом в то место статьи, которое надо познать да бы ускорить выборку? :)

    http://technet.microsoft.com/en-us/library/ms175527(v=sql.105).aspx
    21 окт 14, 13:42    [16736470]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    АцкийСкотона
    Member

    Откуда: Чебоксары
    Сообщений: 56
    Glory
    АцкийСкотона
    Это не мой выбор.

    А кто тут распинался про универсальный триггер ?

    АцкийСкотона
    Мне сейчас объяснили что датапровайдеры по умолчанию при апдейте поля в датасете апдейтят ВСЕ поля в бд для этой записи.

    По-умолчанию - это значит, когда ленивый программист вообще не захотел ничего задать

    АцкийСкотона
    Что бы сделать апдейт только апдейченых(гы), то там надо както заморачиваться еще.

    У вас существует ТЗ ??? Там что так и написано "программируйте, чтобы не надо как-то было заморачиваться" ?



    А кто тут распинался про универсальный триггер ?
    Я про логирование говорил. :)

    По-умолчанию - это значит, когда ленивый программист вообще не захотел ничего задать
    Не стоит обвинять кого-либо, если не знаете сами как это умолчание обойти. Ок?

    У вас существует ТЗ ??? Там что так и написано "программируйте, чтобы не надо как-то было заморачиваться" ?
    Человек молодой. Де вы видели ТЗ, которое диктует как работать фреймворкам? Где вы вообще видели писателя ТЗ который слышал слово фреймворк? Что вы прям а. :) ЕСли у вас на каждый чих есть ТЗ- возмите меня к ВАМ!!! Я у вас буду СЧАСТЛИВ!!!
    Кстатьи, у вас там в ТЗ не прописано как должна работать выборка с инсертед\делетед?:) А можно почитать?:)
    21 окт 14, 13:43    [16736485]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    АцкийСкотона
    А кто тут распинался про универсальный триггер ?
    Я про логирование говорил. :)

    Фейспалм.

    АцкийСкотона
    Не стоит обвинять кого-либо, если не знаете сами как это умолчание обойти. Ок?

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

    АцкийСкотона
    Человек молодой. Де вы видели ТЗ, которое диктует как работать фреймворкам? Где вы вообще видели писателя ТЗ который слышал слово фреймворк? Что вы прям а. :) ЕСли у вас на каждый чих есть ТЗ- возмите меня к ВАМ!!! Я у вас буду СЧАСТЛИВ!!!

    Я понял. ТЗ - нет.
    21 окт 14, 13:46    [16736506]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    АцкийСкотона
    Member

    Откуда: Чебоксары
    Сообщений: 56
    Glory
    АцкийСкотона
    если вас не затруднит, ткните меня пожалуйста носом в то место статьи, которое надо познать да бы ускорить выборку? :)

    http://technet.microsoft.com/en-us/library/ms175527(v=sql.105).aspx

    Там только про авторазрастание. Давайте конкретнее. Ссылок буз объяснений я тоже могу накидать. :)
    21 окт 14, 13:48    [16736531]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    АцкийСкотона
    Там только про авторазрастание. Давайте конкретнее.

    А вы это уже выполнили что ли ?

    АцкийСкотона
    Давайте конкретнее. Ссылок буз объяснений я тоже могу накидать.

    Если вы ищите кнопку "Работай быстро", то ее не существует.
    21 окт 14, 13:49    [16736541]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    Shakill
    Member

    Откуда: мск
    Сообщений: 1887
    АцкийСкотона
    Shakill
    насчет генератора кода я имел в виду не формирование динамики в триггере (хотя и туда можно передать через табличную переменную), а генерация самого триггера на основе шаблона и указания таблицы, на которой он будет висеть.


    Не катит. Таблиц сотни. Потом в таких шаблонах черт ногу сломит. Да и ошибки трудно будет искать.

    один шаблон логирования, разный набор полей. запуск генератора триггеров по необходимости - при изменении таблиц и когда собираетесь изменить логику логирования.
    а в чем трудности поиска ошибок?
    21 окт 14, 13:56    [16736616]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    АцкийСкотона
    Member

    Откуда: Чебоксары
    Сообщений: 56
    Glory
    АцкийСкотона
    А кто тут распинался про универсальный триггер ?
    Я про логирование говорил. :)

    Фейспалм.

    АцкийСкотона
    Не стоит обвинять кого-либо, если не знаете сами как это умолчание обойти. Ок?

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

    АцкийСкотона
    Человек молодой. Де вы видели ТЗ, которое диктует как работать фреймворкам? Где вы вообще видели писателя ТЗ который слышал слово фреймворк? Что вы прям а. :) ЕСли у вас на каждый чих есть ТЗ- возмите меня к ВАМ!!! Я у вас буду СЧАСТЛИВ!!!

    Я понял. ТЗ - нет.


    Фейспалм.
    Ну ладно. Не буду заставлять вас понимать чег оя именно хочу добиться.


    Ну разумеется.
    Весь ваш код и способы просто шедевры программисткой мысли.

    Я не говорил этого. Я вообще в код клиента не лазаю. Не вижу щас причины что вы так на меня прёте. :)


    А дурацкий сервер не желает выполнять такой прекрасный код.
    Ну не само железо конечно. Но скуль по идее полон мест которые вроде как должны быть дико скоростны и удобны, но на самом деле настолько сыры, что никакого желания(и пользы) юзать нет. Вспомним хотя бы дикокласнцю идею про CLR-триггер, который не знает(и никак совершенно узнать не может) на какой же он таблице выполнился! :) Давайте не будем . :)
    Мне от вас надо только решение проблемы с тормозами по выборки из псевдотаблиц. Остальное можно обсудить за рамками данной темы, если вам так интересно. :)



    Glory
    АцкийСкотона
    Там только про авторазрастание. Давайте конкретнее.

    А вы это уже выполнили что ли ?

    АцкийСкотона
    Давайте конкретнее. Ссылок буз объяснений я тоже могу накидать.

    Если вы ищите кнопку "Работай быстро", то ее не существует.


    1. Что конкретно там выполнить надо? Вы нормально объясниете.
    2. Да не ищу я. Я привык работать нормально, а не на отъ***сь. Поэтому и не делаю в каждом триггере кастомный говнокод лишь бы побыстрее задачу закрыть! В виду этого пришел к тому, что механизм логироания должен быть уиверсальным, насколько это возможно. Повторяюсь. Мне проще один раз запихнут в каждый тирггер вызов моей CLRки, чем потом при изменени модели логирования лопатить ВСЕ триггеры.
    21 окт 14, 13:57    [16736630]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    АцкийСкотона
    Повторяюсь. Мне проще один раз запихнут в каждый тирггер вызов моей CLRки

    Ну так запихните, что хотите.
    Что вам от сервера то нужно ? Чтобы он ваши "сексуальные" фантазии воплощал в жизнь ?
    21 окт 14, 14:01    [16736663]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    АцкийСкотона
    Member

    Откуда: Чебоксары
    Сообщений: 56
    Shakill
    АцкийСкотона
    пропущено...


    Не катит. Таблиц сотни. Потом в таких шаблонах черт ногу сломит. Да и ошибки трудно будет искать.

    один шаблон логирования, разный набор полей. запуск генератора триггеров по необходимости - при изменении таблиц и когда собираетесь изменить логику логирования.
    а в чем трудности поиска ошибок?

    Опять....
    В триггере не только механизм логирования. Там еще есть действия над другими объектами БД, с приджойниванием псевдотаблиц.
    Проблем с логирвоанием у меня НЕТ! :) У меня проблема с тормозами SELECT 1 FROM INSERTED. Прочтите тему с начала .если не понимаете об чем речь идет.
    21 окт 14, 14:01    [16736666]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    АцкийСкотона
    У меня проблема с тормозами SELECT 1 FROM INSERTED.

    Ну так поставьте диски побыстрее, процессоры побстрее, памяти побольше, редакцию постарьше. Делайте что нибудь.
    21 окт 14, 14:03    [16736676]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    АцкийСкотона
    Member

    Откуда: Чебоксары
    Сообщений: 56
    Glory
    АцкийСкотона
    Повторяюсь. Мне проще один раз запихнут в каждый тирггер вызов моей CLRки

    Ну так запихните, что хотите.
    Что вам от сервера то нужно ? Чтобы он ваши "сексуальные" фантазии воплощал в жизнь ?


    Повторяю еще раз.
    Мне надо чтобы "SELECT * INTO #T_INSERTED FROM INSERTED" выполнялось так же быстро, как и "SELECT * INTO #T_INSERTED2 FROM Charge_Details"(это таблица на которой триггер, если чо). Что непонятного?:) Ну не устраивает меня 45 секунд против 0,5.
    21 окт 14, 14:03    [16736686]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    Гавриленко Сергей Алексеевич
    Member

    Откуда:
    Сообщений: 37254
    АцкийСкотона
    Glory
    пропущено...

    Ну так запихните, что хотите.
    Что вам от сервера то нужно ? Чтобы он ваши "сексуальные" фантазии воплощал в жизнь ?


    Повторяю еще раз.
    Мне надо чтобы "SELECT * INTO #T_INSERTED FROM INSERTED" выполнялось так же быстро, как и "SELECT * INTO #T_INSERTED2 FROM Charge_Details"(это таблица на которой триггер, если чо). Что непонятного?:) Ну не устраивает меня 45 секунд против 0,5.
    Не выбирайте из inserted, раз не устраивает. Выбирайте из временной таблицы. Что непонятного?

    И да, версия сервера какая?

    Сообщение было отредактировано: 21 окт 14, 14:05
    21 окт 14, 14:05    [16736695]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    АцкийСкотона
    Повторяю еще раз.

    Если сто раз повторить "халва", то во рту слаще не станет

    АцкийСкотона
    Мне надо чтобы "SELECT * INTO #T_INSERTED FROM INSERTED" выполнялось так же быстро, как и "SELECT * INTO #T_INSERTED2 FROM Charge_Details"(это таблица на которой триггер, если чо). Что непонятного?:) Ну не устраивает меня 45 секунд против 0,5.

    Повторяю еще раз (гы) - кнопки "Работай быстро" не существует.
    Если "переливание" всех данных из временной таблицы во временную таблицу работает медленно, то нет программных средств ускорения.
    21 окт 14, 14:08    [16736724]     Ответить | Цитировать Сообщить модератору
     Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
    АцкийСкотона
    Member

    Откуда: Чебоксары
    Сообщений: 56
    Гавриленко Сергей Алексеевич
    АцкийСкотона
    пропущено...


    Повторяю еще раз.
    Мне надо чтобы "SELECT * INTO #T_INSERTED FROM INSERTED" выполнялось так же быстро, как и "SELECT * INTO #T_INSERTED2 FROM Charge_Details"(это таблица на которой триггер, если чо). Что непонятного?:) Ну не устраивает меня 45 секунд против 0,5.
    Не выбирайте из inserted, раз не устраивает. Выбирайте из временной таблицы. Что непонятного?

    И да, версия сервера какая?


    Для тех, кто не читал тему целиком. Выборку из инсертед я произвожу да бы потом в отдельном потоке ее обработать. Чтобы не задерживаться на этом в триггере. Теперь понятно зачем мне выборка?
    2014 скуль.
    21 окт 14, 14:10    [16736741]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5 6   вперед  Ctrl      все
    Все форумы / Microsoft SQL Server Ответить