|
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
|
|||
---|---|---|---|
#18+
Здравствуйте! Сразу приношу извинения, если где-то такой вопрос был. Честно искал, но не нашел. Обновляются данные в поле типа varbinary(max). Если использовать .WRITE часто происходит зависание запроса. Примеры запроса update [dbo].[Contents] set content .WRITE(0x7786515865154786515575894577865158651568,null,null) where ..... На более свежих MS SQL WRITE вроде работает хорошо. Есть ли возможность сделать нормальную работу WRITE в версиях 2005 и 2008 или это неисправимо? Заранее спасибо за ответ! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 17:02 |
|
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
|
|||
---|---|---|---|
#18+
x-doomer, как Вы узнали, что дело в версии, а не в оборудовании, например. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 17:04 |
|
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
|
|||
---|---|---|---|
#18+
Т.е. вы даже не пытались анализировать, что происходит в момент выполнения запроса? Какой статус у сессии, какие ожидания? Сразу на версию все списали? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 17:08 |
|
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
|
|||
---|---|---|---|
#18+
На одно и то же оборудование ставились разные версии и из backup'а поднималась база. Выполнялся один и тот же запрос. На 2005-2008 происходили зависания, на версии старше, 2016, нет. Мне кажется это не такой сложный запрос (без курсоров, CTE и т.п.), который надо мониторить. Просто update с заменой или конкатенацией или stuff работает тоже хорошо. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 08:23 |
|
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
|
|||
---|---|---|---|
#18+
Вот что показывает профилёр Для запроса типа Content=Content+0x15 CPU 405 Reads 645634 Writes 25073 Duration 1446 Для запроса Content .WRITE(0x15,null,null) CPU 13728 Reads 40388114 Writes 1363810 Duration 29898 Причём второй пришлось останавливать, он так и не выполнился ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 09:22 |
|
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
|
|||
---|---|---|---|
#18+
x-doomer Мне кажется это не такой сложный запрос (без курсоров, CTE и т.п.), который надо мониторить. Причём независимо от "сложности запроса". В данном случае, во первых, нужно сообщить полную информацию о версии, а не "SQL 2005", во вторых, хотя бы посмотреть в момент зависания, что "зависает" запрос, командой sp_who2 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 11:09 |
|
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
|
|||
---|---|---|---|
#18+
x-doomer Вот что показывает профилёр Выложите сюда (в формате плана, а не картинкой, и актуальные, а не оценочные, по возможности) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 11:10 |
|
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
|
|||
---|---|---|---|
#18+
Версии серверов такие 2005 SP2 9.0.3033 2008 SP3 10.50.6000 Сейчас тестирую на 2008 sp_who2 показывает UPDATE План запроса попробую, т.к. сколько будет висеть и выполниться ли вообще не известно ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 11:27 |
|
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
|
|||
---|---|---|---|
#18+
x-doomer sp_who2 показывает UPDATE Вообще, большой расход ресурсов показывает, что другой план. Или есть такой баu для WRITE, но я про такое не слышал. x-doomer План запроса попробую, т.к. сколько будет висеть и выполниться ли вообще не известно ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 14:07 |
|
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
|
|||
---|---|---|---|
#18+
alexeyvg, откуда такая разница в количестве операций записи? Там таблицы разные или условия разные. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 15:24 |
|
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
|
|||
---|---|---|---|
#18+
Владислав Колосов alexeyvg, откуда такая разница в количестве операций записи? Там таблицы разные или условия разные. Автор же просто словами описал, даже без команд, которые он запускает. Может быть всё что угодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 17:29 |
|
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
|
|||
---|---|---|---|
#18+
В общем вот что получается. В наследство достались две базы с таблицами с BLOB данными. Одна на 1 тер, вторая поменьше, гигов 300. В первой данные были типа image, перевели на тип varbinary Во второй таблицу пришлось переносить в другую файловую группу. При попытки дозаписи данных в varbinary методом WRITE наблюдалось зависание запроса. При восстановлении на другом сервере в MS SQL 2005 и 2008 зависание оставалось, при восстановлении в 2016 запрос выполнялся быстро. Оставили зависший запрос на ожидание (на меньшей базе). Через полчаса он выполнился. И, вроде, после этого WRITE стал корректно отрабатываться и на рабочей базе и на восстановленных копиях в 2005 и 2008 серверах MS SQL. Т.е. проблема как бы решена, надеюсь, но хотелось бы понять суть происходящего. Где-то читал про то, как MS SQL сохраняет такие данные в страницах, возможно связано с этим, а в 2016 подкорректировали. Если кто знает о чём-то подобном, буду благодарен за информацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2020, 13:42 |
|
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
|
|||
---|---|---|---|
#18+
x-doomer, скорее всего, выделялось место. Надо было наблюдать за дисковой активностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2020, 16:20 |
|
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
|
|||
---|---|---|---|
#18+
Владислав Колосов x-doomer, скорее всего, выделялось место. Надо было наблюдать за дисковой активностью. 30 минут выделялось место для записи одного байта? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2020, 16:57 |
|
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
|
|||
---|---|---|---|
#18+
x-doomer Владислав Колосов x-doomer, скорее всего, выделялось место. Надо было наблюдать за дисковой активностью. 30 минут выделялось место для записи одного байта? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2020, 19:01 |
|
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
|
|||
---|---|---|---|
#18+
Ennor Tiegael x-doomer пропущено... 30 минут выделялось место для записи одного байта? Просто INSERT и UPDATE без WRITE за секунду записывает несколько мегабайт. Вот нашёл статью такую http://improve.dk/what-is-the-size-of-the-lob-pointer-for-max-types-like-varchar-varbinary-etc/ Возможно связано с переформированием указателей. Но это просто предположение. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2020, 11:16 |
|
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
|
|||
---|---|---|---|
#18+
Продолжение истории, если кому интересно... Ситуация стала повторяться, оказалось что всё это связано с обновлением статистики. Написано понятно вот здесь https://switch-case.ru/54269883 У меня почему-то открывается странно этот сайт, вот выдержка https://switch-case.ru/54269883 На данный момент мы просто отключили автоматическое создание статистики для этой таблицы, но мне интересно, действительно ли это самая лучшая практика. Согласно комментарию Microsoft на this Connect item , да, это так. В SQL Server 2012 поведение было изменено таким образом, что UPDATE Table SET x.WRITE больше не запускает создание статистики. Другие типы запросов могут по-прежнему приводить к созданию статистических данных, поэтому отключение автоматической статистики по-прежнему может быть правильным. Теперь понятно почему в старших версия это не проявлялось, т.е., как и было озвучено в теме, есть прямая зависимость от версии. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2020, 13:37 |
|
|
start [/forum/topic.php?fid=46&msg=39959588&tid=1685470]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 299ms |
total: | 446ms |
0 / 0 |