Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Есть такая загвоздочка. Есть некий класс, содержащий кучу полей и среди них поля Flag и Field. На оба поля созданы Bitmap индексы. Есть запрос вида SELECT Id FROM Class WHERE Flag=2 OR Flag=3 Первая запись получается почти мгновенно. Если же его задать с правилом ORDER BY Field, то при большом количестве записей этого класса с большим разнообразием значений поля Field время получения первой записи иногда больше на порядки. SELECT Id FROM Class WHERE Flag=2 OR Flag=3 ORDER BY Field, Как можно это дело ускорить? Множить число индексов на всевозможные сочетания полей, участвующих в сортировке и фильтрации представляется нецелесообразным, поскольку это неизбежно ухудшит время вставки записи. Или в данном случае тоже следует переходить на COS? Для задач подсчета количества записей разного рода это уже позволило получить очень хороший выигрыш в производительности по сравнению с обычным SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2008, 22:32 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Тут конечно надо посмотреть планы запросов, однако почти наверняка окажется, что в первом случае перебор идет по исходной глобали, а во втором случае - делается временная глобаль с верхним индексом Field. Можно ли это оптимизировать как-то - знают наверняка только разработчики SQL движка в Интерсистемсе. Попробуй сделать по Field не-bitmap индекс. А вообще лучше это в WRC спрашивать. На COS, наверное, можно написать более производительный алгоритм, побитово складывающий два индекса по flag а потом последовательно перемножающий их со всеми индексами field. Опять таки, я не уверен, что это уже не делается SQL движком - надо смотреть план запроса. =Сергей Шутов (logist) ООО Димас, Хабаровск Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2008, 04:36 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Hisbreht Victor Есть запрос вида Код: plaintext У меня "шкурный" интерес... А запрос Код: plaintext как будет выполняться? Быстрее или медленнее? Что будет с оценкой запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2008, 09:02 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Caché 2008.2.526 Сгенерировал 1000000 записей со случайными значениями Flag и Field. Код: plaintext 1. 2. Запросы вида Код: plaintext 1. 2. На моих данных: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2008, 09:37 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
servitдали одинаковый план и соответственно стоимость. Вот и верь после этого в оптимизацию запросов! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2008, 11:44 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Чем же тут не угодил оптимизатор? Условия в запросах и вправду эквивалентны: IN по определению - лишь краткая форма OR, не более. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2008, 13:32 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Alexey MaslovIN по определению - лишь краткая форма OR, не более. Как раз всегда утверждалось другое. Типа более оптимален и все такое... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2008, 13:48 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Кем утверждалось и что именно? IN, как известно, может выступать как предикат в условиях равенства (equality comparisons) и в подзапросах (subquery comparisons). Наш случай - первый. По определению:Док-яThe IN predicate can serve as shorthand for the use of multiple equality comparisons linked together with the OR operator.Т.е. имеем Код: plaintext Более сложный случай - второй (Subquery Comparison), и насколько помню, как раз с этим были проблемы в Cache 5.0 и произошли серьезные подвижки в последних версиях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2008, 14:07 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Alexey MaslovКем утверждалось и что именно? Кем-то из ИС... Цитат и ФИО привести уже не могу... Alexey MaslovЧто здесь можно соптимизировать? Панятия не имею... Вот и прошу время от времени потестиль тех, у кого большое количество даных, индексов и т.п... Пока разницы не наблюдалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2008, 14:15 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
krvsa Вот и прошу время от времени потестиль тех, у кого большое количество даных, индексов и т.п... Пока разницы не наблюдалось. так было выведено, что $O(,-1) рабоатет медленне, чем просто $O() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2008, 15:09 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Про разницу с ордером я не знал... ---------- Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2008, 15:16 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
krvsaПро разницу с ордером я не знал... ---------- Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT я джо некоторого времени тоже)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2008, 16:18 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
ceshka-krvsa Вот и прошу время от времени потестиль тех, у кого большое количество даных, индексов и т.п... Пока разницы не наблюдалось. так было выведено, что $O(,-1) рабоатет медленне, чем просто $O() ? А что, появилась левосторонняя ссылка в блоках? Вроде не замечал еще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2008, 08:26 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Сергей, не удивляйтесь: для некоторых форумчан Cache - черный ящик, им возможно и не интересно знать "что под капотом" (но надеюсь, что таких меньшинство, иначе здесь станет совсем грустно :). Отчасти в этом виновата и ИнтерСистемз: интерес к "внутренностям" не приветствуется, даже по каналам WRC нелегко что-то разузнать. Последнее описание формата БД, которым я располагаю, 10 летней давности, и, конечно, это 2К-формат БД. Некое понимание устройства 8К-БД приходит после ремонта оных с помощью ^RECOVER, но не все опции этой утилиты понятны. ИМХО, не хватает книги "Inside Cache" или "Cache Internals". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2008, 12:52 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Имел в виду, конечно, ^REPAIR :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2008, 13:14 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Во истину чтото скрытое но ценное. Вот толи MSM была ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2008, 13:15 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Sergei Obrastsov А что, появилась левосторонняя ссылка в блоках? Вроде не замечал еще. тут имеется в виду, что идти вперёд естественно, и структура блока заточена только под это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2008, 13:39 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Если в двух словах, то да. 1) В блоках используется сжатие ключей, т.е. хранится изменение полной индексной ссылки по отношению к предыдущему узлу. 2) Хранится Right Link - ссылка на следующий блок на том же уровне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2008, 15:01 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Alexey MaslovЕсли в двух словах, то да. 1) В блоках используется сжатие ключей, т.е. хранится изменение полной индексной ссылки по отношению к предыдущему узлу. 2) Хранится Right Link - ссылка на следующий блок на том же уровне. это многое объясняет))) а откуда информация? мне вот давно интересно как и что происходит на системном уровне, например механизм транзакций, механизм создания журнала, что происходит при появлении новой записи между двумя соседними... или это всё закрытая информация? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2008, 15:40 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Информация почерпнута из очень старой док-ии (10 лет назад она была еще бумажной :) и еще из столь же старого учебного пособия ИнтерСистемз, в переводе которого я участвовал. Если ISC не возражает, я могу вырезать главу про структуру БД (2К-блоки!) и выложить сюда. Но это, наверное, уже после праздников. Кроме того, некоторое знакомство с алгоритмами работы B-дерева помогает найти ответы на многие вопросы :) Здесь источников - море. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2008, 16:03 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Alexey MaslovИнформация почерпнута из очень старой док-ии (10 лет назад она была еще бумажной :) и еще из столь же старого учебного пособия ИнтерСистемз, в переводе которого я участвовал. Если ISC не возражает, я могу вырезать главу про структуру БД (2К-блоки!) и выложить сюда. Но это, наверное, уже после праздников. Кроме того, некоторое знакомство с алгоритмами работы B-дерева помогает найти ответы на многие вопросы :) Здесь источников - море. да, конечно, лишним не будет, выкладывайте, с радостью почитаю ничо, если я еще спрошу? в оракле принцип работы с В-деревьями такой же, как в М-системах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2008, 16:16 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Alexey MaslovИнформация почерпнута из очень старой док-ии (10 лет назад она была еще бумажной :) и еще из столь же старого учебного пособия ИнтерСистемз, в переводе которого я участвовал. Если ISC не возражает, я могу вырезать главу про структуру БД (2К-блоки!) и выложить сюда. Но это, наверное, уже после праздников. Кроме того, некоторое знакомство с алгоритмами работы B-дерева помогает найти ответы на многие вопросы :) Здесь источников - море. Алексей, может выложите на writeimagejournal, там и База Знаний имеется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 03:45 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
cheshkaв оракле принцип работы с В-деревьями такой же, как в М-системах?Не знаток Оракла, но подозреваю, что нет. В традиционных РСУБД В-деревьями могут быть индексы, а данные хранятся в таблицах. Cache (и М-системы), напротив, хранят данные на нижнем уровне B-дерева. Чтобы подчернуть этот факт, его обычно называют "B*-дерево". Это по классике :) я многого не знаю про Оракл, и он, возможно, тоже умеет нечто подобное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 12:19 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Dimonможет выложите на writeimagejournalУвы, Copyright мне этого не позволяет :( Выходные данные документа такие: INTERSYSTEMS' EDUCATIONAL SERVICES. Руководство для студентов по системному и сетевому администрированию Caché. InterSystems Corporation Copyright, 1998, C52898 Глава, которую имел в виду, называется "Module 5. Основные понятия". Может быть, я что-то свое про это напишу, когда будет время (в Новом году :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 12:36 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Alexey Maslovcheshkaв оракле принцип работы с В-деревьями такой же, как в М-системах?Не знаток Оракла, но подозреваю, что нет. В традиционных РСУБД В-деревьями могут быть индексы, а данные хранятся в таблицах. Cache (и М-системы), напротив, хранят данные на нижнем уровне B-дерева. Чтобы подчернуть этот факт, его обычно называют "B*-дерево". Это по классике :) я многого не знаю про Оракл, и он, возможно, тоже умеет нечто подобное. спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 12:51 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Торможу, Param1->Value ведет в таблицу BAG.Params1, но все-таки индекс по Value не используется. Или его там нет, или с ним что-то не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 11:59 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.Торможу, Param1->Value ведет в таблицу BAG.Params1, но все-таки индекс по Value не используется. Или его там нет, или с ним что-то не так.Я, конечно, могу заблуждаться, но, как мне кажется, это не должно иметь особого значения в данном случае, поскольку выборка данного значения осуществляется из небольшого справочника в самом начале, и, согласно плану, на дальнейшем исполнении запроса никак не сказывается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 13:06 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Ну мне же неизвестно было, какой размер у таблицы BAG.Params1 А сколько строк в результате выборки должно появиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2009, 08:35 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Hisbreht Victor, Caché 2009.1.FT1 На моей машине (Intel Core2 Duo, 2Гб) выборка с отображением ID всех 2000000 записей на C# занимает 28 секунд: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. И планы запросов на моих данных не такие как у Вас. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2009, 15:13 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
krvsaMaWrперед выдачей даже одного значения необходимо выполнить полную выборку (по всем данным). Эт того-то и задержка. Даже если сортирока по возрастанию и имеет надежду ускорения с "подключением" некоего индекса... То сортировка по убыванию теряет всякую надежду на ускорение. Как вариант ускоряться в другом направлении. Вплоть до прямого доступа... Наличие индексов на полях, участвующих в сортировке, приводит к ускорению запроса в независимости от направления сортировки. Планы запросов приведены для версии 5.0.21: Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2009, 15:57 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
>Наличие индексов на полях, участвующих в сортировке, приводит к ускорению запроса Мой опыт говорит об обратном. По крайней мере в каше 5.2 в запрос select * from table where field1=value1 order by field2 выполняется намного дольше при наличии индекса по field2, потому что независимо от селективности почему-то используется индекс по field2 При том, что select * from table where field1=value1 выдается быстро и количество записей небольшое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 05:28 |
|
||
|
Производительность сортировки.
|
|||
|---|---|---|---|
|
#18+
Блок А.Н., В версии 5.2 - вполне возможно. Это кандидат на запрос о проблеме в WRC. В версиях 2008.2.1.902, 2009.1.FT1 планы запросов следующие: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 09:13 |
|
||
|
|

start [/forum/topic.php?all=1&fid=39&tid=1558552]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
53ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 355ms |

| 0 / 0 |
