|
|
|
Sybse ASE, как понять, какой запрос лучше?
|
|||
|---|---|---|---|
|
#18+
Есть stored procedure с двумя параметрами: min message id, max message id. Для заданного диапазона она выводит какие-то данные. Обнаружилось, что если min = max, процедура минут 20 тупит прежде, чем выдать пустой резалт сет. Попробовал прописать hint (index message_index). Для min = max всё стало летать. Теперь хочется сравнить, насколько ухудшилась работа для других случаев. Сделал set statistics io on (как в мануале учили :)) и смотрю: с индексом W (4): Table: my_table_1 scan count 1, logical reads: (regular=1624863 apf=0 total=1624863), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 W (5): Table: my_table_2 scan count 1, logical reads: (regular=2961 apf=0 total=2961), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 W (6): Table: Worktable1 scan count 28969, logical reads: (regular=93902 apf=0 total=93902), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 без индекса W (4): Table: my_table_1 scan count 5048, logical reads: (regular=327051 apf=0 total=327051), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 W (5): Table: my_table_2 scan count 1, logical reads: (regular=2961 apf=0 total=2961), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 Лишнии logical reads это очень страшно? Замер с секундомером даёт не очень внятные результаты. Интересно представить какая будет разница в производительности сервера, если эта процедура будет часто "дёргаться". И где в гугль хранится сокральная информация на тему перфоманса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 14:33 |
|
||
|
Sybse ASE, как понять, какой запрос лучше?
|
|||
|---|---|---|---|
|
#18+
Я бы не стал использовать хинт в процедурах. Он может улучшить производительность для текущего состояния данных, но что будет, скажем, через полгода кол-во данных радикально поменяется? Лучше попытаться понять почему без хинта индекс не используется. Будет ли подобная проблема если вы запустите просто запрос. Сравните планы запросов для для min != max и для min = max (сравните кол-во Total I/O и какие индексы выбираются или не выбираются) Попробуйте посмотреть план процедуры set fmtonly on без хинта и с хинтом для min != max и для min = max. В отношении зависания на 20 минут - я не знаю сколько записей в вашей таблице, но если нет проблем с блокировками, то либо записей должно быть быть очень много, либо у вас может быть просто битый индекс. Попробуйте обновить статистику и перестроить индекс. Если не поможет попробуйте reorg with rebuild. Он вам перестроит страницы данных и индексов и обновит все статистики. Думаю, что поможет. Желаю удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 18:07 |
|
||
|
Sybse ASE, как понять, какой запрос лучше?
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs пишет: > Лишнии logical reads это очень страшно? Страшно. Если большое. > Замер с секундомером даёт не очень внятные результаты. Интересно > представить какая будет разница в производительности сервера, если эта > процедура будет часто "дёргаться". Вы IO мерийте, а не секунды. Logical IO. а лучше - пошлите запрос с планом (без вашего хинта). Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 19:06 |
|
||
|
Sybse ASE, как понять, какой запрос лучше?
|
|||
|---|---|---|---|
|
#18+
Рапортую. Сейчас убрал все хинты. Проверил план - получается тот же самый, что с моим хинтом. Порадовался. Почему вчера без хинта получалась абы что - не знаю. Может быть кто-то потихому перебилдил индексы... MasterZiv: > Вы IO мерийте, а не секунды. Logical IO. Глупый вопрос: а как? set statistics io on - это не то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 11:21 |
|
||
|
Sybse ASE, как понять, какой запрос лучше?
|
|||
|---|---|---|---|
|
#18+
Kru В отношении зависания на 20 минут - я не знаю сколько записей в вашей таблице, но если нет проблем с блокировками, то либо записей должно быть быть очень много, либо у вас может быть просто битый индекс. Процедура состоит из трёх последовательных селектов (без изяществ в виде временных таблиц, т.е. всё просто). Селекты простые, join двух таблиц. Самый большой join для таблиц размером 90 087 415 и 1 123 496 строк. Это достаточно много? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 11:26 |
|
||
|
Sybse ASE, как понять, какой запрос лучше?
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs пишет: > Глупый вопрос: а как? set statistics io on - это не то? То, именно то. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 15:19 |
|
||
|
Sybse ASE, как понять, какой запрос лучше?
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs пишет: > Процедура состоит из трёх последовательных селектов (без изяществ в виде > временных таблиц, т.е. всё просто). Селекты простые, join двух таблиц. > Самый большой join для таблиц размером 90 087 415 и 1 123 496 строк. Это > достаточно много? Вы гараж-то откройте ... тьфу, запросы-то покажите... Даже самый простой запрос может очень долго выполняться, и даже уложить сервер. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 15:21 |
|
||
|
Sybse ASE, как понять, какой запрос лучше?
|
|||
|---|---|---|---|
|
#18+
MasterZiv Вы гараж-то откройте ... тьфу, запросы-то покажите... Даже самый простой запрос может очень долго выполняться, и даже уложить сервер. Это один из трёх селектов. Остальные почти такие же. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. log_attribute есть индекс по message_id и парочка других. на order_state индекс по паре unique_id и active. Между селектами стоят проверки на ошибки: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. reporterror кладёт ошибку в отдельную табличку. Вчера наблюдал, как процедура выполняется больше часа. Почему - не понял. В Aqua Data Studio не нашёл где посмотреть кто/кого/почему ждёт. Чем лучше мониторить ase? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 16:42 |
|
||
|
Sybse ASE, как понять, какой запрос лучше?
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs пишет: > Это один из трёх селектов. Остальные почти такие же. "почти такие же" значит - "другие". Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 19:45 |
|
||
|
Sybse ASE, как понять, какой запрос лучше?
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs пишет: > Вчера наблюдал, как процедура выполняется больше часа. Почему - не > понял. В Aqua Data Studio не нашёл где посмотреть кто/кого/почему ждёт. А план ? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 19:49 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=35145456&tid=2011698]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
139ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 292ms |
| total: | 493ms |

| 0 / 0 |
