Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Производительность обхода одного уровня индекса зависит от структуры данных. Если индекс с ключами фиксированной длины и с фиксированным значением (что часто используется в sql-based субд, там значение - это номер записи в массиве записей), то можно вычислить положение любой внутренней ссылки в блоке и использовать например поиск методом половинного деления. Если ключи переменной длины, то это уже невозможно, приходится проходить по блоку сначала в том же направлении сортировки, в котором он был построен (неважно, по возрастанию или убыванию). Будет там компрессия или нет - это уже не важно. Если применяется компрессия для составных ключей каждый фрагмент которого пусть даже фиксирован, проходить придется также в направлении сортировки при построении. Если в индексе ключи фиксированной длины, а значения переменной, то проходить также придется в направлении сортировки. Если требуется перечисление в обратном порядке, то придется пройти вперед, проскочить нужный, выяснить что проскочили и вернуться обратно. То же самое относится к операции $query. Но $order намного усложняется если ключи еще и с компрессией, потому что искомое значение может оказаться как в пройденном предыдущем, так и в дописанном хвосте. Те, кто особенно внимательно изучали mssql, могли заметить в документации оговорку, что выборка по индексу производится быстрее если desc или asc в операции order by совпадает с desc или asc используемом при построении индекса. Что касается right link и left link в блоках cache и msm - то это для переливов при балансировке. Переливы конечно упрощаются, но поддержание согласованных уровней имеет и отрицательную сторону - простенькая операция изменения базы (неважно, вставка, перезапись или удаление) может привести к перестроению совершенно невиновных блоков и к отметке об их модифицированности, что снижает ценность кеша. Впрочем, нам это только одно теоретизирование, повлиять на структуру базы каше мы вряд ли сможем. Хотя в стандарте не оговаривается в каком именно порядке должны храниться ключи, обычно все М системы хранят все глобалы в одной сортировке. В sql системах в зависимости от реализации можно повлиять на сортировку в структуре индекса. Можно даже попробовать побарствовать и иметь два индекса отличающиеся направлением сортировки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 13:07 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Некоторые материалы можно найти тут http://drus.boom.ru/Science.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 13:18 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
ну яЧто касается right link и left link в блоках cache и msm - то это для переливов при балансировке.Left link нет ни в Cache, ни в MSM. Right link есть, но они, ИМХО, используется в 2 случаях: - для доступа к блокам длинных данных - для обеспечения возможности контроля целостности БД. Если бы не было блоков длинных данных, в правых связях не было бы необходимости. При расщеплении блоков можно "плясать" как (1) от блоков указателей, так и (2) от правых связей в блоках данных. Но в последнем случае блоки указателей все равно пришлось бы корректировать для поддержания целостности, и неизвестно еще, какой подход быстрее. Есть подозрение, что Cache использует второй подход. Пример М-системы без правых связей: GT.M. В нем, конечно же, и блоков длинных данных нет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 14:29 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
И все-таки возвращаясь к проблеме времени получения ответа на запрос с сортировкой. Индексы какого типа лучше использовать для сортировки? Почему сортировка настолько увеличивает время получения первой записи? Особенно странно это выглядит, когда из массива записей различными условиями выбирается достаточно небольшое количество. Запрос с сортировкой дает первую запись за время на порядки большее, чем без сортировки при тех же условиях. Ведь сортировка вроде бы выполняется в последнюю очередь. Может быть дело в каких нибудь системных настройках самой СУБД? Виктор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2009, 20:33 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Hisbreht Victor...Запрос с сортировкой дает первую запись за время на порядки большее, чем без сортировки при тех же условиях. Ведь сортировка вроде бы выполняется в последнюю очередь. Сортировка выполняется во время выборки путем записи в промежуточную глобаль (индексы - Ваш порядок сортировки) или путем пробежки по индексу, удовлетворяющему порядку сортировки. Поэтому, если нет индекса перед выдачей даже одного значения необходимо выполнить полную выборку (по всем данным). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2009, 08:19 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
MaWrперед выдачей даже одного значения необходимо выполнить полную выборку (по всем данным). Эт того-то и задержка. Даже если сортирока по возрастанию и имеет надежду ускорения с "подключением" некоего индекса... То сортировка по убыванию теряет всякую надежду на ускорение. Как вариант ускоряться в другом направлении. Вплоть до прямого доступа... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2009, 08:34 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Смотрите планы запросов с сортировкой и без, че-то тут нечисто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2009, 09:04 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
А как насчет видов индексов? bitmap индексы, похоже, в этом случае совсем не помощники? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2009, 19:01 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Есть мнение что они просто супер в запросах "типа count"... ---------- Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 08:34 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
krvsaЕсть мнение что они просто супер в запросах "типа count"...Это да, но только если эти "запросы" реализовывать на COS, ручками проводя операции над разными bitmap индексами. Как показала личная практика, если использовать обычный SQL, ничего они не дают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 20:16 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Hisbreht VictorКак показала личная практика, если использовать обычный SQL, ничего они не дают. А как же все анонсы от ИС? Получается что все библия нафик? "Хорошенькое" дело... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2009, 08:41 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
krvsaHisbreht VictorКак показала личная практика, если использовать обычный SQL, ничего они не дают. А как же все анонсы от ИС? Получается что все библия нафик? "Хорошенькое" дело...Когда запрос простенький, то все оно работает, но если навернуть что-нибудь посерьезнее, с большим количеством условий, связанных разными отношениями, из нескольких взаимосвязанных классов-таблиц, то оптимизатор начинает использовать только один из индексов, вместо того, чтобы начать их подвергать операциям "и" и "или". По крайней мере это показывает план доступа. Или я что-то не понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2009, 19:26 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Hisbreht VictorКогда запрос простенький, то все оно работает, но если навернуть что-нибудь посерьезнее, с большим количеством условий, связанных разными отношениями, из нескольких взаимосвязанных классов-таблиц, то оптимизатор начинает использовать только один из индексов, вместо того, чтобы начать их подвергать операциям "и" и "или". По крайней мере это показывает план доступа. Или я что-то не понимаю? Все зависит от запроса, наличия или отсутствия индекса, их типов, подсказок оптимизатору, настроек таблиц и т.д. Иногда оптимизатор не использует индекс, когда это выгодно. Choosing Index Type Optimizing Performance ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2009, 20:57 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Hisbreht Victor, Может у вас сервер слабый? Или скажем медленные диски? И сколько у вас время получения первой записи и количество строк в таблице? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2009, 03:39 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Hisbreht Victor то оптимизатор начинает использовать только один из индексов, вместо того, чтобы начать их подвергать операциям "и" и "или". По крайней мере это показывает план доступа. Или я что-то не понимаю? Ну операции "или" в индексах есть точно - выбирается только один индекс. А что вы подразумете под "и"? Какая операция на глобалах должна проводиться? Вообще я видел план запроса с INTERSECT индексов, но это специфичная ситуация (и кстати я специально менял селективности чтобы уйти от этого) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2009, 06:07 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Вопрос, с которого началась данная ветка, все более становится ребром. 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 бит)? Виктор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2009, 21:44 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Зачем вам индексы по всем полям, тем более битмап. Это действительно нужно? Попробуйте удалить индекс по полю Field, в некоторых версих каше оптимизатор запросов творит фигню, если индексировано поле, по которому идет сортировка. Покажите план запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 06:05 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Да, попробуйте $system.SQL.TuneTable("Tablename",1,1) (Чукча не читатель, чукча писатель, мож кто уже говорил - не знаю) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 06:47 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Блок А.Н., Индексы, тем более 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. ===================== Выполняется больше минуты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 09:26 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Какой реальный объем глобалов, в которых хранятся данные (можно посмотреть с помощью ^%GSIZE) Какой объем кеша глобалов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 10:04 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
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, то индекс по этому полю вообще лучше не использовать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 10:52 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.Какой реальный объем глобалов, в которых хранятся данные (можно посмотреть с помощью ^%GSIZE) BAG.ParamsD 81337 552,500,652 83 % 78 BAG.ParamsI 6751 41,843,281 76 % 0 Блок А.Н.Какой объем кеша глобалов? Стоит автоматическое распределение памяти, оно выделяет на кэш глобалов 255 МБ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 11:42 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
CJIECAPbА на поле Flags индекс висит? По вашему плану запроса, каше использует только индекс по Param1. И ещё вопрос: сколько (примерно) различных Param1 с Value=10 ? (Т.е. если почти всем Param1 в таблице BAG.Params соответствует Value=10, то индекс по этому полю вообще лучше не использовать) На поле Flags тоже есть bitmap индекс Param1 с Value=10 в таблице чуть больше 3 тысяч из 2 миллионов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 11:47 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Hisbreht VictorСтоит автоматическое распределение памяти, оно выделяет на кэш глобалов 255 МБИмеет смысл отдать под кэш всю свободную физическую память (но обычно не более 1600Мб на 32-битной системе). Можно сразу, можно постепенно, наблюдая за эффектом (512 - 1024 - 1536). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 11:57 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Около 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? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 11:57 |
|
||
|
|

start [/forum/topic.php?fid=39&msg=35866729&tid=1558552]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
145ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 281ms |
| total: | 556ms |

| 0 / 0 |
