Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008 / 17 сообщений из 17, страница 1 из 1
19.05.2020, 17:02
    #39959588
x-doomer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
Здравствуйте!

Сразу приношу извинения, если где-то такой вопрос был. Честно искал, но не нашел.

Обновляются данные в поле типа varbinary(max).

Если использовать .WRITE часто происходит зависание запроса.

Примеры запроса

update [dbo].[Contents] set content .WRITE(0x7786515865154786515575894577865158651568,null,null) where .....

На более свежих MS SQL WRITE вроде работает хорошо.

Есть ли возможность сделать нормальную работу WRITE в версиях 2005 и 2008 или это неисправимо?

Заранее спасибо за ответ!
...
Рейтинг: 0 / 0
19.05.2020, 17:04
    #39959592
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
x-doomer,

как Вы узнали, что дело в версии, а не в оборудовании, например.
...
Рейтинг: 0 / 0
19.05.2020, 17:08
    #39959595
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
Т.е. вы даже не пытались анализировать, что происходит в момент выполнения запроса?
Какой статус у сессии, какие ожидания?

Сразу на версию все списали?
...
Рейтинг: 0 / 0
20.05.2020, 08:23
    #39959747
x-doomer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
На одно и то же оборудование ставились разные версии и из backup'а поднималась база.
Выполнялся один и тот же запрос.
На 2005-2008 происходили зависания, на версии старше, 2016, нет.

Мне кажется это не такой сложный запрос (без курсоров, CTE и т.п.), который надо мониторить.

Просто update с заменой или конкатенацией или stuff работает тоже хорошо.
...
Рейтинг: 0 / 0
20.05.2020, 09:22
    #39959767
x-doomer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
Вот что показывает профилёр

Для запроса типа

Content=Content+0x15

CPU 405
Reads 645634
Writes 25073
Duration 1446


Для запроса

Content .WRITE(0x15,null,null)

CPU 13728
Reads 40388114
Writes 1363810
Duration 29898


Причём второй пришлось останавливать, он так и не выполнился
...
Рейтинг: 0 / 0
20.05.2020, 11:09
    #39959802
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
x-doomer
Мне кажется это не такой сложный запрос (без курсоров, CTE и т.п.), который надо мониторить.
С любой ошибкой надо либо разбираться, либо забить, и прекратить это использовать.
Причём независимо от "сложности запроса".

В данном случае,
во первых, нужно сообщить полную информацию о версии, а не "SQL 2005",
во вторых, хотя бы посмотреть в момент зависания, что "зависает" запрос, командой sp_who2
...
Рейтинг: 0 / 0
20.05.2020, 11:10
    #39959803
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
x-doomer
Вот что показывает профилёр
Посмотрите планы этих запросов.
Выложите сюда (в формате плана, а не картинкой, и актуальные, а не оценочные, по возможности)
...
Рейтинг: 0 / 0
20.05.2020, 11:27
    #39959806
x-doomer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
Версии серверов такие

2005 SP2
9.0.3033

2008 SP3
10.50.6000

Сейчас тестирую на 2008
sp_who2 показывает UPDATE

План запроса попробую, т.к. сколько будет висеть и выполниться ли вообще не известно
...
Рейтинг: 0 / 0
20.05.2020, 14:07
    #39959849
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
x-doomer
sp_who2 показывает UPDATE
То есть его никто не блокирует?

Вообще, большой расход ресурсов показывает, что другой план.
Или есть такой баu для WRITE, но я про такое не слышал.
x-doomer
План запроса попробую, т.к. сколько будет висеть и выполниться ли вообще не известно
Ну, можно естимэйт, хотя это, конечно, хуже.
...
Рейтинг: 0 / 0
20.05.2020, 15:24
    #39959888
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
alexeyvg,

откуда такая разница в количестве операций записи? Там таблицы разные или условия разные.
...
Рейтинг: 0 / 0
20.05.2020, 17:29
    #39959972
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
Владислав Колосов
alexeyvg,

откуда такая разница в количестве операций записи? Там таблицы разные или условия разные.
Ну да, разные запросы, условия, обновляемые строки.

Автор же просто словами описал, даже без команд, которые он запускает.

Может быть всё что угодно.
...
Рейтинг: 0 / 0
22.06.2020, 13:42
    #39971815
x-doomer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
В общем вот что получается.

В наследство достались две базы с таблицами с BLOB данными.
Одна на 1 тер, вторая поменьше, гигов 300.
В первой данные были типа image, перевели на тип varbinary
Во второй таблицу пришлось переносить в другую файловую группу.
При попытки дозаписи данных в varbinary методом WRITE наблюдалось зависание запроса.
При восстановлении на другом сервере в MS SQL 2005 и 2008 зависание оставалось, при восстановлении в 2016 запрос выполнялся быстро.
Оставили зависший запрос на ожидание (на меньшей базе). Через полчаса он выполнился. И, вроде, после этого WRITE стал корректно отрабатываться и на рабочей базе и на восстановленных копиях в 2005 и 2008 серверах MS SQL.

Т.е. проблема как бы решена, надеюсь, но хотелось бы понять суть происходящего.
Где-то читал про то, как MS SQL сохраняет такие данные в страницах, возможно связано с этим, а в 2016 подкорректировали.
Если кто знает о чём-то подобном, буду благодарен за информацию.
...
Рейтинг: 0 / 0
22.06.2020, 16:20
    #39971909
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
x-doomer,

скорее всего, выделялось место. Надо было наблюдать за дисковой активностью.
...
Рейтинг: 0 / 0
23.06.2020, 16:57
    #39972497
x-doomer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
Владислав Колосов
x-doomer,

скорее всего, выделялось место. Надо было наблюдать за дисковой активностью.



30 минут выделялось место для записи одного байта?
...
Рейтинг: 0 / 0
23.06.2020, 19:01
    #39972528
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
x-doomer
Владислав Колосов
x-doomer,

скорее всего, выделялось место. Надо было наблюдать за дисковой активностью.



30 минут выделялось место для записи одного байта?
Посмотрите настройки автоприращения файлов. Сервер приращивает не сколько нужно прямщас, а сколько стоит в свойствах БД. Если стоит 1 Тб, то даже если не хватило 1 байта, будет приращивать терабайт.
...
Рейтинг: 0 / 0
24.06.2020, 11:16
    #39972663
x-doomer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
Ennor Tiegael
x-doomer
пропущено...



30 минут выделялось место для записи одного байта?
Посмотрите настройки автоприращения файлов. Сервер приращивает не сколько нужно прямщас, а сколько стоит в свойствах БД. Если стоит 1 Тб, то даже если не хватило 1 байта, будет приращивать терабайт.



Просто INSERT и UPDATE без WRITE за секунду записывает несколько мегабайт.
Вот нашёл статью такую

http://improve.dk/what-is-the-size-of-the-lob-pointer-for-max-types-like-varchar-varbinary-etc/

Возможно связано с переформированием указателей. Но это просто предположение.
...
Рейтинг: 0 / 0
30.10.2020, 13:37
    #40013426
x-doomer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008
Продолжение истории, если кому интересно...

Ситуация стала повторяться, оказалось что всё это связано с обновлением статистики.
Написано понятно вот здесь

https://switch-case.ru/54269883

У меня почему-то открывается странно этот сайт, вот выдержка

https://switch-case.ru/54269883 На данный момент мы просто отключили автоматическое создание статистики для этой таблицы, но мне интересно, действительно ли это самая лучшая практика.


Согласно комментарию Microsoft на this Connect item , да, это так.


В SQL Server 2012 поведение было изменено таким образом, что UPDATE Table SET x.WRITE больше не запускает создание статистики. Другие типы запросов могут по-прежнему приводить к созданию статистических данных, поэтому отключение автоматической статистики по-прежнему может быть правильным.


Теперь понятно почему в старших версия это не проявлялось, т.е., как и было озвучено в теме, есть прямая зависимость от версии.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / WRITE дозапись данных в столбец типа varbinary(max) в MS SQL 2005 - 2008 / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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