Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 как улучшить скорость записи/чтения блобов?  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Хотел бы добиться существенного увеличения производительности записи/чтения блобов.
Ниже приведены тестовые данные и конфигурация.
Буду признателен за советы.



Есть таблица
- средняя длинна строки ~7 кб, большая часть приходится на 5 BLOB полей типа varbinary(max)
- длинна полей иногда > 8kb, поэтому выбран тип varbinary(max)
- хранение блобов (large value types out of row) настроено вне строк
- индексов, констраинтов (для тестового случая) нет
- база не зеркалирована, simple recovery mode

Копируем эту таблицу (select * into... или тулом копирования),
получается в лучшем случае до 4500 строк в секунду что соответствует 30МБ/сек.

Мне кажется, что для используемого железа 30МБ/сек это ну слишком медленно.
Какие есть пути существенно ускорить записи/чтение строк с BLOB полями?

В идеале было бы хорошо добиться пиковой скорости записи/чтения 7000-10000 строк (по ~7КБ) в секунду
НО: на таблице с ключом и индексами!


Сервер, железо:
Microsoft SQL Server 2008 (SP4) - 10.0.6000.29 (X64)
Sep 3 2014 04:11:34
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: )

Диск с базой на: raid10 из 8 дисков (Seagate ST18000M0128 SAS Festplatte)
Raid Controller Cache 512MB
2x Intel Xeon E5-2697-v3
64 GB
12 янв 17, 13:39    [20098287]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8823
Alexander Us,

виртуалка?
12 янв 17, 13:56    [20098372]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Владислав Колосов
Alexander Us,
виртуалка?


Нет.
12 янв 17, 13:58    [20098382]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Модель восстановления какая?
12 янв 17, 14:03    [20098416]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
invm
Модель восстановления какая?

я написал: simple recovery mode
12 янв 17, 14:14    [20098460]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
sdfyj
Guest
Alexander Us
Копируем эту таблицу (select * into... или тулом копирования),
получается в лучшем случае до 4500 строк в секунду что соответствует 30МБ/сек.
Мне кажется, что для используемого железа 30МБ/сек это ну слишком медленно.

А все файлы и логи БД на одном и том же диске ? Какая скорость работы у него ?
12 янв 17, 14:39    [20098580]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
o-o
Guest
блобы хранятся в виде дерева,
вычитывается такое дерево долго.
а select into сначала читает эти деревья,
а потом еще и строит их снова при записи.
у нас тоже все, что копирует блобы, медленно до неприличия
12 янв 17, 15:02    [20098705]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
sdfyj
А все файлы и логи БД на одном и том же диске ? Какая скорость работы у него ?

Логи на отдельном диске, raid1 из двух дисков (параллельно)
12 янв 17, 15:08    [20098740]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
sdfyj
Guest
А всё же протестировать скорость такого диска ? sqlio
Вдруг настройки raid кривые ?

А то ведь Read из таблицы, Write в лог, Write в таблицу.

И посмотреть заодно:
SET STATISTICS TIME ON
SET STATISTICS IO ON
12 янв 17, 15:26    [20098882]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
o-o
блобы хранятся в виде дерева,
... медленно до неприличия

а где узкое место? процессор не загружен, диски тоже, но всё медленно...?

Если серьёзно ускориться в пределах SQL сервера не получится, то какие могут быть альтернативы?

Первое, чот приходит в голову попробоваьть:
- сохранять/читать блобы в файлы/NoSQL из приложения
- сохранять/читать блобы в файлы/NoSQL из clr проуедуры/триггера/функции.
этот вариант более предпочтителен, т.к. хотелось бы иметь доступ у блобам простым селектом на SQL сервере.

при варианте сохранения в файлы неясно, как поведёт себя операционная система, если будет создано 1 миллиард файлов.
при варианте сохранения в NoSQL неясно, какую СУБД выбрать для "скрещивания".
12 янв 17, 15:28    [20098898]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
sdfyj
А всё же протестировать скорость такого диска ? sqlio
Вдруг настройки raid кривые ?

А то ведь Read из таблицы, Write в лог, Write в таблицу.

И посмотреть заодно:
SET STATISTICS TIME ON
SET STATISTICS IO ON


При оказии поробую этот Benchmark Tool, но дисковая система при копировании больших файлов показывала дл 500мБ/сек.
Наверное всётаки дело не в ней. К тому же выше коллега пожаловался на такую же проблему.
12 янв 17, 15:33    [20098927]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
o-o
Guest
Alexander Us
o-o
блобы хранятся в виде дерева,
... медленно до неприличия

а где узкое место? процессор не загружен, диски тоже, но всё медленно...?

организация этого дерева и есть узкое место.
примерно такая аналогия:
пусть имеется таблица(куча для удобства) в 100 млн строк и непокрывающий индекс по нужному полю.
выборку * по условию на это поле, в которую попадут 100 строк, выгоднее сделать по индексу.
но если в результате 1 млн строк, то уже вряд ли индекс заюзает.
почему проще 100 млн просканировать, чем 1 млн лукапов сделать, ведь в индексе даже не ключ кластерного,
а указатель сразу на нужную запись таблицы?
сканирование идет "подряд", а лукапы это рандомные чтения.
вот чтение блобских деревьев это такие рандомные скачки в сторону.

ну и не знаю почему у вас диски не загружены,
у нас перелив блобов это сразу PAGEIOLATCH_SH в ожиданиях.
может, у нас они длиннее?
у нас не по 7Кб (почему такое не хранить в in-row тогда?), реально длинные тексты хранятся

и еще они не задерживаются в кэше.
впечатление такое, что блобы считаются самыми ненужными и вытесняются из кэша первыми, всегда.
только прочтешь это добро, следом приходит читатель той же таблицы и заново с диска начитывает.
у нас конечно не пул, а дикий слив, но другие данные хоть сколько-то живут в нем, а блобы нет
12 янв 17, 16:04    [20099078]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
-Гвоздь-
Guest
Alexander Us,

Можно попробовать уменьшить количество страниц блобов за счет сжатия.

http://aboutsqlserver.com/2015/04/07/compressing-lob-xml-data-in-the-database/

Есть такие проблемы с блобами у меня тоже - пробовал вышеуказанное средство - на чистом XML работает хорошо - сжимается и разжимается.
Не смогли у себя внедрить - основная проблема была с уже пожатыми блобами - поэтому результата не достигли.
12 янв 17, 16:05    [20099081]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
-Гвоздь-
Можно попробовать уменьшить количество страниц блобов за счет сжатия.

Спасибо, но уже сжато :)
12 янв 17, 16:10    [20099103]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
o-o
Guest
-Гвоздь-
Alexander Us,

Можно попробовать уменьшить количество страниц блобов за счет сжатия.

http://aboutsqlserver.com/2015/04/07/compressing-lob-xml-data-in-the-database/

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

лобы не компрессятся
какие у вас были уже пожатые блобы?
---
может, там по ссылке самописка для xml,
но у нас например это просто неструктурированный varchar(max) / text
12 янв 17, 16:11    [20099111]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
o-o
Guest
Alexander Us
-Гвоздь-
Можно попробовать уменьшить количество страниц блобов за счет сжатия.

Спасибо, но уже сжато :)

+
автор
...выбран тип varbinary(max)...хранение блобов (large value types out of row) настроено вне строк

и вы тоже закомпрессили varbinary(max)? off-row???
это как???
12 янв 17, 16:14    [20099124]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
-Гвоздь-
Guest
o-o,

имел в виду - в блоб поля уже ZIP-ом сжато - поэтому сжатие поверх zip-а эффекта не дало
12 янв 17, 16:15    [20099128]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
-Гвоздь-
Guest
o-o,

Это не самописка для XML
а опыт от MVP Dmitri Korotkevitch.
для чистого теста тоже должно помочь - если например нельзя текст пожать в приложении
12 янв 17, 16:18    [20099152]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
o-o
Guest
а, ну нам такое не подойдет,
у нас не binary, текст текстом.
и читать его надо как есть.

непонятно только, что закомпрессил Alexander Us ,
у него же тоже текст, или зачем двоичное в варчаре держать?
12 янв 17, 16:21    [20099174]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
o-o
и вы тоже закомпрессили varbinary(max)? off-row???
это как???

Данные (в основном текстовые) жмутся не клиенте дефлейтом и сохраняются в поле varbinary(max).
На SQL сервере (для удобства) есть парные CLR функции для сжатия/разжатия.
12 янв 17, 16:22    [20099179]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
-Гвоздь-
Guest
o-o
а, ну нам такое не подойдет,
у нас не binary, текст текстом.
и читать его надо как есть.


Попробуйте - вьюху на расжатие можно сделать - с текстом тоже хорошо работает.
Посмотрите статью там есть вполне рабочие примеры использования.
12 янв 17, 16:24    [20099194]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
-Гвоздь-
Попробуйте - вьюху на расжатие можно сделать ...

Вы не совсем поняли.
Примерно то, чот в статье уже реализовано.
Но сжатие/разжатие вынесено на клиенты, чтобы не грузить сервер и сеть.
На сервере есть парные CLR функции, чтбы можно было селектом посмотреть разжатый текст.

Сам вопрос касается не сжатия/разжатия а скорости записи/чтентя блобов.
По этой причине предлагаю оставить тему сжатия/разжатия вне этой ветки.
12 янв 17, 16:30    [20099229]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
o-o
Guest
-Гвоздь-
o-o
а, ну нам такое не подойдет,
у нас не binary, текст текстом.
и читать его надо как есть.


Попробуйте - вьюху на расжатие можно сделать - с текстом тоже хорошо работает.
Посмотрите статью там есть вполне рабочие примеры использования.

нет.
эти блобы в текст кладет дурацкое покупное приложение.
и переписывать его не будут.

и потом, у нас clr enabled 0.
а серверные настройки поменять это убиться.
3 года войны было, чтобы FF вернули в 0,
а то 80 нам выставили и не сдавались до последнего
12 янв 17, 16:37    [20099260]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
-Гвоздь-
Guest
Alexander Us,

Извините - это сообщение было для "о-о"
Сжатие-разжатие - было именно для вас с целью уменьшения количества Блоб страниц - но оно у вас фактически уже есть - и не актуально.
12 янв 17, 16:38    [20099268]     Ответить | Цитировать Сообщить модератору
 Re: как улучшить скорость записи/чтения блобов?  [new]
-Гвоздь-
Guest
o-o,

Ох уж мне эти секьюрити войны - понимаю вас - значит, предлагаемое решение тоже не для вас.
12 янв 17, 16:40    [20099281]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить