powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Производительность сортировки.
25 сообщений из 57, страница 2 из 3
Производительность сортировки.
    #35739604
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Производительность обхода одного уровня индекса зависит от структуры данных. Если индекс с ключами фиксированной длины и с фиксированным значением (что часто используется в sql-based субд, там значение - это номер записи в массиве записей), то можно вычислить положение любой внутренней ссылки в блоке и использовать например поиск методом половинного деления. Если ключи переменной длины, то это уже невозможно, приходится проходить по блоку сначала в том же направлении сортировки, в котором он был построен (неважно, по возрастанию или убыванию). Будет там компрессия или нет - это уже не важно. Если применяется компрессия для составных ключей каждый фрагмент которого пусть даже фиксирован, проходить придется также в направлении сортировки при построении. Если в индексе ключи фиксированной длины, а значения переменной, то проходить также придется в направлении сортировки. Если требуется перечисление в обратном порядке, то придется пройти вперед, проскочить нужный, выяснить что проскочили и вернуться обратно. То же самое относится к операции $query. Но $order намного усложняется если ключи еще и с компрессией, потому что искомое значение может оказаться как в пройденном предыдущем, так и в дописанном хвосте. Те, кто особенно внимательно изучали mssql, могли заметить в документации оговорку, что выборка по индексу производится быстрее если desc или asc в операции order by совпадает с desc или asc используемом при построении индекса. Что касается right link и left link в блоках cache и msm - то это для переливов при балансировке. Переливы конечно упрощаются, но поддержание согласованных уровней имеет и отрицательную сторону - простенькая операция изменения базы (неважно, вставка, перезапись или удаление) может привести к перестроению совершенно невиновных блоков и к отметке об их модифицированности, что снижает ценность кеша. Впрочем, нам это только одно теоретизирование, повлиять на структуру базы каше мы вряд ли сможем. Хотя в стандарте не оговаривается в каком именно порядке должны храниться ключи, обычно все М системы хранят все глобалы в одной сортировке. В sql системах в зависимости от реализации можно повлиять на сортировку в структуре индекса. Можно даже попробовать побарствовать и иметь два индекса отличающиеся направлением сортировки.
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35739642
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Некоторые материалы можно найти тут
http://drus.boom.ru/Science.htm
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35739860
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яЧто касается right link и left link в блоках cache и msm - то это для переливов при балансировке.Left link нет ни в Cache, ни в MSM. Right link есть, но они, ИМХО, используется в 2 случаях:
- для доступа к блокам длинных данных
- для обеспечения возможности контроля целостности БД.
Если бы не было блоков длинных данных, в правых связях не было бы необходимости. При расщеплении блоков можно "плясать" как (1) от блоков указателей, так и (2) от правых связей в блоках данных. Но в последнем случае блоки указателей все равно пришлось бы корректировать для поддержания целостности, и неизвестно еще, какой подход быстрее. Есть подозрение, что Cache использует второй подход.
Пример М-системы без правых связей: GT.M. В нем, конечно же, и блоков длинных данных нет :)
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35792462
Hisbreht Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И все-таки возвращаясь к проблеме времени получения ответа на запрос с сортировкой.
Индексы какого типа лучше использовать для сортировки?
Почему сортировка настолько увеличивает время получения первой записи? Особенно странно это выглядит, когда из массива записей различными условиями выбирается достаточно небольшое количество. Запрос с сортировкой дает первую запись за время на порядки большее, чем без сортировки при тех же условиях. Ведь сортировка вроде бы выполняется в последнюю очередь.
Может быть дело в каких нибудь системных настройках самой СУБД?

Виктор
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35792834
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hisbreht Victor...Запрос с сортировкой дает первую запись за время на порядки большее, чем без сортировки при тех же условиях. Ведь сортировка вроде бы выполняется в последнюю очередь.

Сортировка выполняется во время выборки путем записи в промежуточную глобаль (индексы - Ваш порядок сортировки) или путем пробежки по индексу, удовлетворяющему порядку сортировки. Поэтому, если нет индекса перед выдачей даже одного значения необходимо выполнить полную выборку (по всем данным).
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35792849
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaWrперед выдачей даже одного значения необходимо выполнить полную выборку (по всем данным).
Эт того-то и задержка.
Даже если сортирока по возрастанию и имеет надежду ускорения с "подключением" некоего индекса... То сортировка по убыванию теряет всякую надежду на ускорение.

Как вариант ускоряться в другом направлении. Вплоть до прямого доступа...
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35792894
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотрите планы запросов с сортировкой и без, че-то тут нечисто.
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35794864
Hisbreht Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как насчет видов индексов? bitmap индексы, похоже, в этом случае совсем не помощники?
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35795366
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть мнение что они просто супер в запросах "типа count"...
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35797710
Hisbreht Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsaЕсть мнение что они просто супер в запросах "типа count"...Это да, но только если эти "запросы" реализовывать на COS, ручками проводя операции над разными bitmap индексами. Как показала личная практика, если использовать обычный SQL, ничего они не дают.
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35798128
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hisbreht VictorКак показала личная практика, если использовать обычный SQL, ничего они не дают.
А как же все анонсы от ИС? Получается что все библия нафик? "Хорошенькое" дело...
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35802774
Hisbreht Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsaHisbreht VictorКак показала личная практика, если использовать обычный SQL, ничего они не дают.
А как же все анонсы от ИС? Получается что все библия нафик? "Хорошенькое" дело...Когда запрос простенький, то все оно работает, но если навернуть что-нибудь посерьезнее, с большим количеством условий, связанных разными отношениями, из нескольких взаимосвязанных классов-таблиц, то оптимизатор начинает использовать только один из индексов, вместо того, чтобы начать их подвергать операциям "и" и "или". По крайней мере это показывает план доступа. Или я что-то не понимаю?
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35802898
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hisbreht VictorКогда запрос простенький, то все оно работает, но если навернуть что-нибудь посерьезнее, с большим количеством условий, связанных разными отношениями, из нескольких взаимосвязанных классов-таблиц, то оптимизатор начинает использовать только один из индексов, вместо того, чтобы начать их подвергать операциям "и" и "или". По крайней мере это показывает план доступа. Или я что-то не понимаю?
Все зависит от запроса, наличия или отсутствия индекса, их типов, подсказок оптимизатору, настроек таблиц и т.д. Иногда оптимизатор не использует индекс, когда это выгодно.

Choosing Index Type

Optimizing Performance
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35804780
=Dimon=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hisbreht Victor,
Может у вас сервер слабый? Или скажем медленные диски?
И сколько у вас время получения первой записи и количество строк в таблице?
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35804797
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hisbreht Victor то оптимизатор начинает использовать только один из индексов, вместо того, чтобы начать их подвергать операциям "и" и "или". По крайней мере это показывает план доступа. Или я что-то не понимаю?

Ну операции "или" в индексах есть точно - выбирается только один индекс.

А что вы подразумете под "и"? Какая операция на глобалах должна проводиться?
Вообще я видел план запроса с INTERSECT индексов, но это специфичная ситуация (и кстати я специально менял селективности чтобы уйти от этого)
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35865992
Hisbreht Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос, с которого началась данная ветка, все более становится ребром.
COS - это, конечно, очень хорошо, но некоторые вещи проще и удобнее делать через SQL, тем более, что сил и времени на переделку просто не остается.
И тут как раз именно такая ситуация.
Есть таблица на 2 миллиона записей.
Таблица содержит около десятка полей, на каждое из которых создан bitmap индекс.
Запрос простой. Как правило имеет вид, указанный в начале обсуждения. Может быть только с дополнительным условием на одно из полей.
Типа
SELECT Id FROM Class WHERE Flag IN(2,3) AND Param1=10 ORDER BY Field
или
SELECT Id FROM Class WHERE Flag IN(2,3) AND Param2->param2data=1 ORDER BY Field
Запрос может выполняться больше минуты.
Машина - зверь.
Два Core2 Quad, Памяти 16 Г, дисковая подсистема - чередующийся RAID из 8 дисков.
Но при работе Cache создается ощущение, что дисковая система не перегружена (индикаторы доступа мигают не особо активно) Процессоры заняты от силы на 10 процентов.
Может быть, что-то надо подкрутить в параметрах СУБД и операционной системы (2003 Server R2 32 бит)?

Виктор
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35866269
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем вам индексы по всем полям, тем более битмап. Это действительно нужно?

Попробуйте удалить индекс по полю Field, в некоторых версих каше оптимизатор запросов творит фигню, если индексировано поле, по которому идет сортировка.

Покажите план запроса.
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35866286
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, попробуйте $system.SQL.TuneTable("Tablename",1,1)

(Чукча не читатель, чукча писатель, мож кто уже говорил - не знаю)
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35866449
Hisbreht Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.,

Индексы, тем более bitmap нужны, поскольку постоянно требуется подсчет записей с раскладкой по параметрам. И в этой процедуре именно эти индексы и используются

Проблема кстати, гораздо серьезнее, чем казалась раньше. Теперь и без сортировки запрос выполняется неоправданно медленно.

SELECT ID FROM BAG.Params WHERE Flags IN (2,3) AND Param1->Value=10
План запроса выглядит так
====================
Read master map BAG.Params1.IDKEY, using the given idkey value.

Read bitmap index BAG.Params.Param1IDX, using the given Param1, and looping on ID.

For each row:

Read master map BAG.Params.IDKEY, using the given idkey value.
Output the row.
=====================
Выполняется больше минуты.
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35866537
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой реальный объем глобалов, в которых хранятся данные (можно посмотреть с помощью ^%GSIZE)

Какой объем кеша глобалов?
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35866729
CJIECAPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hisbreht VictorБлок А.Н.,

Индексы, тем более bitmap нужны, поскольку постоянно требуется подсчет записей с раскладкой по параметрам. И в этой процедуре именно эти индексы и используются

Проблема кстати, гораздо серьезнее, чем казалась раньше. Теперь и без сортировки запрос выполняется неоправданно медленно.

SELECT ID FROM BAG.Params WHERE Flags IN (2,3) AND Param1->Value=10
План запроса выглядит так
====================
Read master map BAG.Params1.IDKEY, using the given idkey value.

Read bitmap index BAG.Params.Param1IDX, using the given Param1, and looping on ID.

For each row:

Read master map BAG.Params.IDKEY, using the given idkey value.
Output the row.
=====================
Выполняется больше минуты.
А на поле Flags индекс висит? По вашему плану запроса, каше использует только индекс по Param1.
И ещё вопрос: сколько (примерно) различных Param1 с Value=10 ? (Т.е. если почти всем Param1 в таблице BAG.Params соответствует Value=10, то индекс по этому полю вообще лучше не использовать)
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35866981
Hisbreht Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.Какой реальный объем глобалов, в которых хранятся данные (можно посмотреть с помощью ^%GSIZE)
BAG.ParamsD 81337 552,500,652 83 % 78
BAG.ParamsI 6751 41,843,281 76 % 0

Блок А.Н.Какой объем кеша глобалов?
Стоит автоматическое распределение памяти, оно выделяет на кэш глобалов 255 МБ
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35866996
Hisbreht Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CJIECAPbА на поле Flags индекс висит? По вашему плану запроса, каше использует только индекс по Param1.
И ещё вопрос: сколько (примерно) различных Param1 с Value=10 ? (Т.е. если почти всем Param1 в таблице BAG.Params соответствует Value=10, то индекс по этому полю вообще лучше не использовать)
На поле Flags тоже есть bitmap индекс
Param1 с Value=10 в таблице чуть больше 3 тысяч из 2 миллионов
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35867021
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hisbreht VictorСтоит автоматическое распределение памяти, оно выделяет на кэш глобалов 255 МБИмеет смысл отдать под кэш всю свободную физическую память (но обычно не более 1600Мб на 32-битной системе). Можно сразу, можно постепенно, наблюдая за эффектом (512 - 1024 - 1536).
...
Рейтинг: 0 / 0
Производительность сортировки.
    #35867025
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Около 600мб реальных данных, расположенных непоследовательно фрагментированных, практически без кэша (255мб для таких данных все-таки мало, думаю нужно столько, сколько максимум получится выделить)
Чтение вероятно будет многопроходное, причем будут подтягиваться данные из других таблиц.

Средняя скорость чтения в таких условиях
600Мб/1мин=10 Мб/сек, что в общем неплохо, если не используется индекс. А он не используется, я сразу и не заметил.

авторSELECT ID FROM BAG.Params WHERE Flags IN (2,3) AND Param1->Value=10
План запроса выглядит так
====================
Read master map BAG.Params1.IDKEY, using the given idkey value.

Read bitmap index BAG.Params.Param1IDX, using the given Param1, and looping on ID.

For each row:

Read master map BAG.Params.IDKEY, using the given idkey value.
Output the row.

Куда ведет Param1->Value и ндексировано ли Value?
...
Рейтинг: 0 / 0
25 сообщений из 57, страница 2 из 3
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Производительность сортировки.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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