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

Откуда:
Сообщений: 1064
alexeyvg
uaggster
пропущено...

Это почему ж это не дает?
Разрезали таблицу на несколько секций, положили секции на разные диски. Индексы выровняли, то, сё.
Как минимум при чтении будет дергаться отдельная секция, а не вся таблица.
И параллельные чтения из разных участков таблицы не будут друг другу мешать.
Это как то нестрого - "дёргаться", "мешать"...
Не вижу причин, по которым секционирование может привести к ускорению, при прочих равных.
Вот к замедлению, для этой модели данных, приведёт очень даже хорошо.

На диске лежат данные в секторах, сервер их читает в зависимости от условий, и неважно, есть там какие то секции, или нет.
Разве что поиск по диапазону кластерного индекса может превратиться в скан всей таблицы, и секционирование превратило бы его в скан секции. Но это особый случай, а уж в данной модели вообще неприменим.

Ну как бы при параллельной нагрузке есть разница, читаются ли данные хаотически с одного диска, или с N дисков, сидящих на разных каналах.
И особенно, если вдруг это, не дай бог, не SAS диски, а "такие же, но SATA". Которые не умеют out-of-order, и у которых производительность при произвольном доступе раз эдак в 100 ниже, чем у SAS.
13 апр 17, 12:49    [20398041]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
uaggster
alexeyvg
пропущено...
Это как то нестрого - "дёргаться", "мешать"...
Не вижу причин, по которым секционирование может привести к ускорению, при прочих равных.
Вот к замедлению, для этой модели данных, приведёт очень даже хорошо.

На диске лежат данные в секторах, сервер их читает в зависимости от условий, и неважно, есть там какие то секции, или нет.
Разве что поиск по диапазону кластерного индекса может превратиться в скан всей таблицы, и секционирование превратило бы его в скан секции. Но это особый случай, а уж в данной модели вообще неприменим.

Ну как бы при параллельной нагрузке есть разница, читаются ли данные хаотически с одного диска, или с N дисков, сидящих на разных каналах.
И особенно, если вдруг это, не дай бог, не SAS диски, а "такие же, но SATA". Которые не умеют out-of-order, и у которых производительность при произвольном доступе раз эдак в 100 ниже, чем у SAS.

я так понимаю что вы сразу планируете секционировать, а потом лезть во все секции... ну да, в этом и есть смысл секционирования
13 апр 17, 12:51    [20398051]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
asd24
Member

Откуда:
Сообщений: 47
alexeyvg
У меня одна из таблиц 12 ТБ :-)

:)
таблица весит ~80 GB

alexeyvg
Сколько запросов в секунду? Сколько времени занимает запрос?

в пиковые моменты(1 раз в месяц) может быть до 250-300 запросов в секунду (активность пользовтелей, плановые джобы, обновление конфигов DBA админами). Отдельно любой запрос на SELECT со стороны пользователя работает не более 2 сек. Апдейты админов работают по разному - от секунды до 10 минут.

alexeyvg
Нет ли запросов, которые выполняются долго, и накладывают какие то мешающие другим блокировки? Как загружен ЦПУ? Какие очереди к дискам?
"Тормозит" - это конкретное долгое выполнение запроса, из за которого пользователь долго ожидает реакции на свои действия. Что это за запрос? Почему конкретно он долго выполняется?

Постоянно в пиковые моменты видим блокировки (по 1-5 сек), которые приводят к общим тормозам на сайте. Клиент может ждать 10 секунд ответа от select и до 30ти секунд выполнения апдейта..
13 апр 17, 13:04    [20398119]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
asd24
Member

Откуда:
Сообщений: 47
LSV
Абсолютно вся инфа хранится в одном поле WorkSheetsData.Value ? Это плохая практика. Понадобятся интенсивные преобразования convert() при поиске/выборках/апдейтах, например, даты или ссылки.
Это адовые операции для сервера. Заведома безиндексные.

Я у подобных таблиц делал набор полей всех типов (строка, дата, нюмерик, целое, булеан, БЛОБ) и поле с указанием типа данных.
Всегда заранее известно, какого типа параметр. И в поиске/условиях будет фигурировать поле для нужного типа. Без преобразований.
Избыточность есть, но незначительная.

Тоже думали про такое решение, но решили сделать 1 nvarchar столбец чтобы на стороне веба не нужно было писать логику по определению столбцов или переборы не пустых колонок.
Апдейты с convert выполняются редко и не в рабочее время - с этим проблем нет. Данные в основом это именно текст - поиск работает быстро.
13 апр 17, 13:07    [20398137]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
asd24
Member

Откуда:
Сообщений: 47
alexeyvg
Имеется в виду, что когда вы берёте ответы по анкете из WorkSheetsData, то т.к. кластерный индекс не по WorkSheetsID, сервер делает лукап, доставая записи по одной уже по WorkSheetsDataID.
Логично делать кластерный индекс по WorkSheetsID, что бы они лежали вместе, и сразу же читались по запросу по WorkSheetsID

я вас понял, попробую сделать кластерный индекс по WorkSheetsID и проверить результаты в нагрузочном тестировании. Спасибо
13 апр 17, 13:09    [20398147]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
SELECT .. FROM xxx with(nolock) может немного помочь в вопросе производительности и блокировок.
13 апр 17, 13:19    [20398216]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
s_ustinov
Member

Откуда: Munchen, DE
Сообщений: 2307
asd24
Постоянно в пиковые моменты видим блокировки (по 1-5 сек), которые приводят к общим тормозам на сайте. Клиент может ждать 10 секунд ответа от select и до 30ти секунд выполнения апдейта..

Ваша проблема - в блокировках.
Сама по себе структура таблиц к тормозам большого отношения не имеет.
Проверьте, какие у вас транзакции и как возникают блокировки - и разбирайтесь с блокировками.
13 апр 17, 14:14    [20398633]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
asd24
Member

Откуда:
Сообщений: 47
uaggster
Это как раз говорит, о том, что дисковая подсистема может являться узким местом.
Очередь к диску - какая в это время? (А диски, конечно, SAS, а не SATA, да?)
Если чтения - случайные, а таблица таки в память - не лезет, то и читаться данные будут случайно с дисков. Что тождественно равно очень медленно. У вас же не SSD диски?

Я поговорю с админам насчет нагрузки на диски. Спасибо.
У нас SSD

uaggster
Разрезали таблицу на несколько секций, положили секции на разные диски. Индексы выровняли, то, сё.
Как минимум при чтении будет дергаться отдельная секция, а не вся таблица.
И параллельные чтения из разных участков таблицы не будут друг другу мешать.

Я попробую сэмулировать такой подход. Спасибо
13 апр 17, 14:54    [20398881]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
asd24
Member

Откуда:
Сообщений: 47
LSV
Наверно это поле Value еще и индексировано ?
Индекс по такому полю nvarchar(4000) это тоже адовая штука. Пользы от него мало, а размер индекса огромный.

Индекса по этому столбцу нет.
13 апр 17, 14:55    [20398893]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
aleks2
Guest
uaggster
Это почему ж это не дает?
Разрезали таблицу на несколько секций, положили секции на разные диски. Индексы выровняли, то, сё.
Как минимум при чтении будет дергаться отдельная секция, а не вся таблица.
И параллельные чтения из разных участков таблицы не будут друг другу мешать.

Кто ж знает, что что у вас узкое место?

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


Шаман живет в глухом краю...
Ты, ыксперт, хоть скажи по какому месту секционировать будешь?


s_ustinov
asd24
Постоянно в пиковые моменты видим блокировки (по 1-5 сек), которые приводят к общим тормозам на сайте. Клиент может ждать 10 секунд ответа от select и до 30ти секунд выполнения апдейта..

Ваша проблема - в блокировках.
Сама по себе структура таблиц к тормозам большого отношения не имеет.
Проверьте, какие у вас транзакции и как возникают блокировки - и разбирайтесь с блокировками.

Наивняк.

1. Блокировки неизбежны ибо MS SQL - блокировочник.
2. Если запрос выполняется "мгновенно" - блокировки не могут мешать.
3. Короче, корень зла не блокировки, а время исполнения запроса. Сделаете 1 мкс - и нема проблем.
4. На дедлоки тредстартер не жалился.
13 апр 17, 15:32    [20399176]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
o-o
Guest
господи помилуй, да посмотрите же вы ожидания, sys.dm_os_waiting_tasks,
прежде чем увешивать все индексами и секционировать.
13 апр 17, 15:34    [20399197]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
aleks2
Guest
o-o
господи помилуй, да посмотрите же вы ожидания, sys.dm_os_waiting_tasks,
прежде чем увешивать все индексами и секционировать.

И?

ЗЫ. Удивительно, что еще не посоветовали snapshot.
13 апр 17, 15:40    [20399240]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
o-o
Guest
что и?
он сам не знает, что именно у него тормозит.
а будет написано в явном виде
13 апр 17, 15:42    [20399260]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
aleks2
Guest
Я, канешно, понимаю, что учиться щас немодно.

Теорию очередей придумали задолго до компутеров...

"250-300 запросов в секунду"
"не более 2 сек"

это несовместимо.

Чтобы отрабатывать 250 запросов в секунду, очевидным образом, один запрос должен исполняться не дольше 1/250 секунды.

Т.е. максимум вашей системы... ну десяток-другой запросов в секунду, после чего очередь необработанных запросов начинает расти.
13 апр 17, 15:48    [20399302]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
aleks2
Guest
o-o
что и?
он сам не знает, что именно у него тормозит.
а будет написано в явном виде

И чо?
Он и так знает - запросы у него тормозят.
13 апр 17, 15:49    [20399310]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
aleks2
o-o
что и?
он сам не знает, что именно у него тормозит.
а будет написано в явном виде

И чо?
Он и так знает - запросы у него тормозят.

дядя я знаю что у вас сломалось(с)
13 апр 17, 15:51    [20399321]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
aleks2
Guest
TaPaK
aleks2
пропущено...

И чо?
Он и так знает - запросы у него тормозят.

дядя я знаю что у вас сломалось(с)

Иди, чини.
13 апр 17, 15:53    [20399340]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
o-o
Guest
aleks2
o-o
что и?
он сам не знает, что именно у него тормозит.
а будет написано в явном виде

И чо?
Он и так знает - запросы у него тормозят.

дарагуля, не написать ли тебе в MS с заявлением
о бесполезности сего dmv?
ведь и так всем понятно, что тормозят запросы, а ждут они какие-то другие запросы?
хотя я тя огорчу, ждать можно что угодно, даже обычное чтение с дисков
13 апр 17, 16:02    [20399398]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
TaPaK
Member

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

ждуны, а не запросы...
13 апр 17, 16:03    [20399405]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
aleks2
Guest
o-o
aleks2
пропущено...

И чо?
Он и так знает - запросы у него тормозят.

дарагуля, не написать ли тебе в MS с заявлением
о бесполезности сего dmv?
ведь и так всем понятно, что тормозят запросы, а ждут они какие-то другие запросы?
хотя я тя огорчу, ждать можно что угодно, даже обычное чтение с дисков


Популярно объясняю для невежд...

Бессмысленно смотреть "чаво там ждут запросы?".
Пока ОДИН запрос выполняется дольше, чем 1/250 сек.

Как-то так.
13 апр 17, 16:06    [20399416]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
aleks2
o-o
пропущено...

дарагуля, не написать ли тебе в MS с заявлением
о бесполезности сего dmv?
ведь и так всем понятно, что тормозят запросы, а ждут они какие-то другие запросы?
хотя я тя огорчу, ждать можно что угодно, даже обычное чтение с дисков


Популярно объясняю для невежд...

Бессмысленно смотреть "чаво там ждут запросы?".
Пока ОДИН запрос выполняется дольше, чем 1/250 сек.

Как-то так.

это у всех одноЯдровый :) процессор или вы думаете у всех MAXDOP 1
13 апр 17, 16:08    [20399438]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
o-o
Guest
aleks2
o-o
пропущено...

дарагуля, не написать ли тебе в MS с заявлением
о бесполезности сего dmv?
ведь и так всем понятно, что тормозят запросы, а ждут они какие-то другие запросы?
хотя я тя огорчу, ждать можно что угодно, даже обычное чтение с дисков


Популярно объясняю для невежд...

Бессмысленно смотреть "чаво там ждут запросы?".
Пока ОДИН запрос выполняется дольше, чем 1/250 сек.

Как-то так.

дарагуля,
я тя уверяю, что у нас одни и те же запросы
с одними и теми же планами
могут внезапно тормозить в 3-5 раз, все поголовно с PAGEIOLATCH_SH.
и не поверишь, это системисты на виртуалке с дисками пакостят.
их пнешь, и тут же все в норму приходит.
...а ведь могли бы как ТС сразу обеспокоиться,
индекс на каждую колонку повесить и срочно секционировать
13 апр 17, 16:10    [20399450]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
aleks2
Guest
TaPaK
aleks2
пропущено...


Популярно объясняю для невежд...

Бессмысленно смотреть "чаво там ждут запросы?".
Пока ОДИН запрос выполняется дольше, чем 1/250 сек.

Как-то так.

это у всех одноЯдровый :) процессор или вы думаете у всех MAXDOP 1


Иногда... лучше жевать.

ЗЫ. Если ОДИН запрос выполняется 1/250 сек. То ДВА запроса будут выполняться не менее 2 * (1/250) секунды.
Независимо от числа ядер, шпинделей и гигабайт.
13 апр 17, 16:12    [20399464]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
s_ustinov
Member

Откуда: Munchen, DE
Сообщений: 2307
aleks2
Наивняк.

1. Блокировки неизбежны ибо MS SQL - блокировочник.
2. Если запрос выполняется "мгновенно" - блокировки не могут мешать.
3. Короче, корень зла не блокировки, а время исполнения запроса. Сделаете 1 мкс - и нема проблем.
4. На дедлоки тредстартер не жалился.

Ну да, конечно

Есть разница между транзакцией и запросом. И если приложение писали особо продвинутые товарищи, то транзакция открывается, блокируется несколько табличек на запись, и ждем... ждем... ждем... Если повезет - дедлока не будет. Если не повезет - будет.
Каждый отдельный запрос в транзакции может выполняться почти мгновенно. Но возникновению блокировок это не помешает.

А для пользователей это всё выглядит как тормоза.
13 апр 17, 16:13    [20399470]     Ответить | Цитировать Сообщить модератору
 Re: Помогите поправить структуру таблиц чтобы улучшить производителость  [new]
s_ustinov
Member

Откуда: Munchen, DE
Сообщений: 2307
aleks2
TaPaK
пропущено...

это у всех одноЯдровый :) процессор или вы думаете у всех MAXDOP 1


Иногда... лучше жевать.

ЗЫ. Если ОДИН запрос выполняется 1/250 сек. То ДВА запроса будут выполняться не менее 2 * (1/250) секунды.
Независимо от числа ядер, шпинделей и гигабайт.

Золотые слова - про жевать.
Как хорошо, что я не учился по сверх достоверному источнику ББС (бабка бабке сказала), как это делали вы.

У меня некоторые запросы выполняются по нескольку минут. Но, например, во многих случаях, если один запрос выполняется минуту, то если запустить два таких запроса с интервалов в секунду, второй завершится не через 2 минуты, а через минуту и 5 секунд.
13 апр 17, 16:22    [20399536]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить