|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
поигрался на тестовом сервере - результат мне нравится! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 15:54 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
On 18.07.2011 16:54, Imperous wrote: > поигрался на тестовом сервере - результат мне нравится! Как бы оптимизатор теперь думает, что все таблицы обладают дефолтной статистикой. Это значит почти пустые, и любой аргумент селективен (возможно, что что-то не так, или что-то ещё). Оно вам может и нравится, как конкретные 2-3 запроса оптимизируются, но вряд ли это хорошо для сервера в целом. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 16:21 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
Imperouscherrex_DenImperous, а что будет если удалить статистику? delete stattistics. на первый взгляд - супер!!! отработало все очень шустро и с нормальным планом! пасиба! будем смотреть че там дальше будет. зы вот чего не ожидал того не ожидал! Это не паноцея!!! Это только доказывает, что проблема в статистике. Разбирайте статистику, что, в ней не так!!! Оптимизатор упорно считает, что кол-во строк возвращаемое по индексу vid_doc_dat_uchet в таблице document, больше чем кол-во строк в таблице с которой делается join. И еще, скажите какие уникальные поля(набор полей) для каждой таблицы? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 18:59 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
cherrex_DenImperousпропущено... на первый взгляд - супер!!! отработало все очень шустро и с нормальным планом! пасиба! будем смотреть че там дальше будет. зы вот чего не ожидал того не ожидал! Это не паноцея!!! Это только доказывает, что проблема в статистике. Разбирайте статистику, что, в ней не так!!! Оптимизатор упорно считает, что кол-во строк возвращаемое по индексу vid_doc_dat_uchet в таблице document, больше чем кол-во строк в таблице с которой делается join. И еще, скажите какие уникальные поля(набор полей) для каждой таблицы? document.id_doc recv_doc.id_recv nal_doc.id_nal_doc ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 08:57 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
но фишка еще в том что "тормоза" касаются не только этих таблиц, а практически всех... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 09:01 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
и даже в другой базе данных на том же сервере... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 09:01 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
итак, вчера я понаблюдал за тем что получилось, результат: 1) в половине случаев - все залетало 2) в другой половине - очень затормозилось что сделал: там, где затормозилось делал update all statistics по касающимся тормозов таблицам результат: после первого запуска процедур, т.е. на второй - все начинало летать но 1! такие часть тормозов все же осталась. этой ночью запустил update all statistics по всем таблицам - часть процедур проверил, тормозов не обнаружено. но 2! решил поэкспериментировать все с тем же запросиком и увидел картину, которую видел до манипуляций с удалением и обновлением статистики. результаты: 1. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
маленькая поправка - первое чтение сервер делал с диска (physical), затем из кэша авторQUERY PLAN FOR STATEMENT 1 (at line 1). STEP 1 The type of query is SELECT. FROM TABLE recv_doc rd Nested iteration. Table Scan. Forward scan. Positioning at start of table. Using I/O Size 16 Kbytes for data pages. With LRU Buffer Replacement Strategy for data pages. FROM TABLE document d Nested iteration. Index : pk_id_doc Forward scan. Positioning by key. Keys are: id_doc ASC Using I/O Size 2 Kbytes for index leaf pages. With LRU Buffer Replacement Strategy for index leaf pages. Using I/O Size 2 Kbytes for data pages. With LRU Buffer Replacement Strategy for data pages. FROM TABLE nal_doc nd Nested iteration. Index : id_recv Forward scan. Positioning by key. Keys are: id_recv ASC Using I/O Size 2 Kbytes for index leaf pages. With LRU Buffer Replacement Strategy for index leaf pages. Using I/O Size 2 Kbytes for data pages. With LRU Buffer Replacement Strategy for data pages. Server Message: Number 3630, Severity 10 Server 'sybase_ds', Line 1: Total estimated I/O cost for statement 1 (at line 1): 33712884. Parse and Compile Time 0. SQL Server cpu time: 0 ms. Table: document scan count 3923647, logical reads: (regular=4090243 apf=0 total=4090243), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 Table: recv_doc scan count 1, logical reads: (regular=145113 apf=0 total=145113), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 Table: nal_doc scan count 9540, logical reads: (regular=11270 apf=0 total=11270), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 Server Message: Number 3631, Severity 10 Server 'sybase_ds', Line 1: Total actual I/O cost for this command: 8493252. Total writes for this command: 0 Execution Time 128. SQL Server cpu time: 12800 ms. SQL Server elapsed time: 12786 ms. (15 rows affected) 2. вставил хинты Код: plaintext 1. 2. 3. 4. 5. 6.
авторQUERY PLAN FOR STATEMENT 1 (at line 1). STEP 1 The type of query is SELECT. FROM TABLE document d Nested iteration. Index : vid_doc_dat_uchet Forward scan. Positioning by key. Keys are: vid_doc ASC dat_uchet ASC Using I/O Size 16 Kbytes for index leaf pages. With LRU Buffer Replacement Strategy for index leaf pages. Using I/O Size 16 Kbytes for data pages. With LRU Buffer Replacement Strategy for data pages. FROM TABLE recv_doc rd Nested iteration. Index : id_doc_kod_recv Forward scan. Positioning by key. Keys are: id_doc ASC kod_recv ASC Using I/O Size 16 Kbytes for index leaf pages. With LRU Buffer Replacement Strategy for index leaf pages. Using I/O Size 16 Kbytes for data pages. With LRU Buffer Replacement Strategy for data pages. FROM TABLE nal_doc nd Nested iteration. Index : id_recv Forward scan. Positioning by key. Keys are: id_recv ASC Using I/O Size 16 Kbytes for index leaf pages. With LRU Buffer Replacement Strategy for index leaf pages. Using I/O Size 16 Kbytes for data pages. With LRU Buffer Replacement Strategy for data pages. Server Message: Number 3630, Severity 10 Server 'sybase_ds', Line 1: Total estimated I/O cost for statement 1 (at line 1): 198675638. Parse and Compile Time 0. SQL Server cpu time: 0 ms. Table: document scan count 1, logical reads: (regular=1583 apf=0 total=1583), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 Table: recv_doc scan count 1938, logical reads: (regular=8216 apf=0 total=8216), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 Table: nal_doc scan count 9540, logical reads: (regular=14575 apf=0 total=14575), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 Server Message: Number 3631, Severity 10 Server 'sybase_ds', Line 1: Total actual I/O cost for this command: 48748. Total writes for this command: 0 Execution Time 0. SQL Server cpu time: 0 ms. SQL Server elapsed time: 46 ms. (15 rows affected) не понимаю, почему я должен думать за оптимизатор??? (((( ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2011, 09:22 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
Imperous, Выложите обновленную статистику opdiag-a по этим трем таблицам. ЗЫ: Только текстовыми файлами выложите, а то "портянки" такие читать сложно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2011, 09:44 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
cherrex_DenImperous, Выложите обновленную статистику opdiag-a по этим трем таблицам. ЗЫ: Только текстовыми файлами выложите, а то "портянки" такие читать сложно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2011, 10:08 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
Imperous, Код: plaintext 1. 2. 3. 4. 5. 6. 7.
а такой запрос как отработает? план покажите! ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2011, 13:22 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
cherrex_DenImperous, Код: plaintext 1. 2. 3. 4. 5. 6. 7.
а такой запрос как отработает? план покажите! мгновенно, вот так авторQUERY PLAN FOR STATEMENT 1 (at line 1). STEP 1 The type of query is SELECT. FROM TABLE document d Nested iteration. Index : vid_doc_dat_uchet Forward scan. Positioning by key. Keys are: vid_doc ASC dat_uchet ASC Using I/O Size 16 Kbytes for index leaf pages. With LRU Buffer Replacement Strategy for index leaf pages. Using I/O Size 16 Kbytes for data pages. With LRU Buffer Replacement Strategy for data pages. FROM TABLE recv_doc rd Nested iteration. Index : id_doc_kod_recv Forward scan. Positioning by key. Keys are: id_doc ASC kod_recv ASC Using I/O Size 16 Kbytes for index leaf pages. With LRU Buffer Replacement Strategy for index leaf pages. Using I/O Size 16 Kbytes for data pages. With LRU Buffer Replacement Strategy for data pages. Server Message: Number 3630, Severity 10 Server 'sybase_ds', Line 1: Total estimated I/O cost for statement 1 (at line 1): 4982342. Parse and Compile Time 0. SQL Server cpu time: 0 ms. Table: document scan count 1, logical reads: (regular=1583 apf=0 total=1583), physical reads: (regular=2 apf=0 total=2), apf IOs used=0 Table: recv_doc scan count 1938, logical reads: (regular=8216 apf=0 total=8216), physical reads: (regular=79 apf=18 total=97), apf IOs used=150 Server Message: Number 3631, Severity 10 Server 'sybase_ds', Line 1: Total actual I/O cost for this command: 21380. Total writes for this command: 0 Execution Time 7. SQL Server cpu time: 700 ms. SQL Server elapsed time: 656 ms. (9540 rows affected) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2011, 14:37 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
а вопрос так и весит открытый и никаких интересных мыслей нету... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2011, 09:48 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
On 22.07.2011 10:48, Imperous wrote: > а вопрос так и весит открытый и никаких интересных мыслей нету... Это у меня с мейлером что-то. Либо со мной. Постоянно вместо Reply to newsgroup получается Reply to sender. Сейчас выловлю неушедшую почту. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2011, 11:21 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
Я все письма неушедшие отправлю одним скопом. авторOn 15.07.2011 16:46, Imperous wrote: MasterZiv On 15.07.2011 11:54, Imperous wrote: В таком виде перепиши запрос : и попробуй. время выполнения - 38 сек... Так а план где ? План запроса давай. > та дело в том что таблиц более 350, и ведь еще несколько месяцев назад я не знал > такой беды.. > и очень много процедур чтоб их всех пропатчить. Это немного. Средняя БД. Поработал бы ты в нашей БД, 5000 таблиц, 17000 процерур... > мне почему-то не нравится forceplan как решение. Это -- правильная позиция, но иногда forceplan -- единственное решение. Оптимизатор может by design только порядка 80 процентов запросов правильно оптимизировать. Остальные -- только руками. Тебе только надо разобраться, можно как-то ещё решить проблему. авторOn 18.07.2011 14:36, Imperous wrote: > на первый взгляд - супер!!! > отработало все очень шустро и с нормальным планом! > пасиба! > будем смотреть че там дальше будет. Не радуйся, это ничего не значит ровным чсётом. Случайность. авторOn 20.07.2011 10:22, Imperous wrote: > не понимаю, почему я должен думать за оптимизатор??? (((( Ты во-первых запрос норально напиши. JOIN ... ON JOIN ... ON Во-вторых, может тебе вообще думать не нравится ? Тогда ты не ту профессию избрал. В третьих, ещё раз, нужно выработать правильное философское отношение к тому, как работает оптимизатор. В любой СУБД, не только в ASE, оптимизатор -- очень сложная программа. Сложность задачи оптимизации -- NP, оптимизация -- NP-полная задача, т.е. решается только полным перебором всех вариантов. Решить её надо за очень короткое время (пользователь ждёт результат запроса), кол-во возможных планов растёт как N! где N - кол-во таблиц в запросе. Никакой оптимизатор никакой современной СУБД не может нормально оптимизировать все запросы, а это значит, что порядка 20-30 процентов запросов тебе придётся оптимизировать вручную. Ну и практический вывод: если оптимизатор испытывает трудности с каким-то запросом, бессмысленно как пытаться понять, почему это происходит (разве что только из соображений любознательности), так и пытаться заставить его оптимизировать этот запрос. Надо просто проставить хинты, форсплан если нужно, и успокоится. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2011, 11:24 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
MasterZivOn 15.07.2011 11:54, Imperous wrote: В таком виде перепиши запрос : select nd.*, rd.value_recv, d.dat_uchet from document d inner join recv_doc rd on d.id_doc = rd.id_doc and rd.kod_recv = 27 inner join nal_doc nd on rd.id_recv = nd.id_recv where d.dat_uchet <= "2011/06/01" and d.vid_doc = 39 и попробуй. теперь результат другой, возможно связан с некоторой перенастройкой железа сервера авторQUERY PLAN FOR STATEMENT 1 (at line 1). STEP 1 The type of query is SELECT. FROM TABLE recv_doc rd Nested iteration. Table Scan. Forward scan. Positioning at start of table. Using I/O Size 16 Kbytes for data pages. With LRU Buffer Replacement Strategy for data pages. FROM TABLE document d Nested iteration. Index : document_id_doc_15346285101 Forward scan. Positioning by key. Keys are: id_doc ASC Using I/O Size 2 Kbytes for index leaf pages. With LRU Buffer Replacement Strategy for index leaf pages. Using I/O Size 2 Kbytes for data pages. With LRU Buffer Replacement Strategy for data pages. FROM TABLE nal_doc nd Nested iteration. Index : id_recv Forward scan. Positioning by key. Keys are: id_recv ASC Using I/O Size 2 Kbytes for index leaf pages. With LRU Buffer Replacement Strategy for index leaf pages. Using I/O Size 2 Kbytes for data pages. With LRU Buffer Replacement Strategy for data pages. Server Message: Number 3630, Severity 10 Server 'sybase_ds', Line 1: Total estimated I/O cost for statement 1 (at line 1): 33753094. Parse and Compile Time 0. SQL Server cpu time: 0 ms. Table: document scan count 3924028, logical reads: (regular=4090666 apf=0 total=4090666), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 Table: recv_doc scan count 1, logical reads: (regular=145309 apf=0 total=145309), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 Table: nal_doc scan count 9513, logical reads: (regular=11234 apf=0 total=11234), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 Server Message: Number 3631, Severity 10 Server 'sybase_ds', Line 1: Total actual I/O cost for this command: 8494418. Total writes for this command: 0 Execution Time 131. SQL Server cpu time: 13100 ms. SQL Server elapsed time: 13153 ms. (15 rows affected) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2011, 11:42 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
MasterZiv, авторТы во-первых запрос норально напиши. JOIN ... ON JOIN ... ON если честно, я не понимаю, чем плох мой запрос? авторВо-вторых, может тебе вообще думать не нравится ? Тогда ты не ту профессию избрал. я говорил по поводу оптимизатора, когда простая ситуация и он должен я думаю больше внимания уделять индексам в зависимости от условия запроса ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2011, 11:45 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
On 22.07.2011 12:42, Imperous wrote: > FROM TABLE > recv_doc Таблица recv_doc -то небось маленькая ? ВОт её он и пихает вверх плана. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2011, 12:07 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
On 22.07.2011 12:45, Imperous wrote: > JOIN ... ON > JOIN ... ON > если честно, я не понимаю, чем плох мой запрос? У тебя условие ON стоит после всех JOIN-ов. Я вот например не знаю, что должна делать в таком случае СУБД. > я говорил по поводу оптимизатора, когда простая ситуация и он должен я думаю > больше внимания уделять индексам в зависимости от условия запроса Значит, тебе кажется, что ситуация простая, а она непростая. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2011, 12:10 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
MasterZivOn 22.07.2011 12:42, Imperous wrote: > FROM TABLE > recv_doc Таблица recv_doc -то небось маленькая ? ВОт её он и пихает вверх плана. совсем не маленькая... как минимум раз в 10 больше таблицы document ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2011, 13:25 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
MasterZivOn 22.07.2011 12:45, Imperous wrote: > JOIN ... ON > JOIN ... ON > если честно, я не понимаю, чем плох мой запрос? У тебя условие ON стоит после всех JOIN-ов. Я вот например не знаю, что должна делать в таком случае СУБД. хм у меня получается такая цепочка: главная (document.id_doc) -> вспомогательная (recv_doc.id_doc и recv_doc.id_recv) -> вспомогательная к вспомогательной (nal_doc.id_recv), т.е. связь айдишек именно в такой последовательности идет. изучу еще этот вопрос... но всегда считал что именно так правильно писать, т.е. делать как бы вложенность ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2011, 13:34 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
On 22.07.2011 14:34, Imperous wrote: > хм > у меня получается такая цепочка: главная (document.id_doc) -> вспомогательная > (recv_doc.id_doc и recv_doc.id_recv) -> вспомогательная к вспомогательной > (nal_doc.id_recv), т.е. связь айдишек именно в такой последовательности идет. from tab1 join tab2 on ... join tab3 on ... join tab4 on ... и так далее. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2011, 14:09 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
MasterZivOn 22.07.2011 14:34, Imperous wrote: > хм > у меня получается такая цепочка: главная (document.id_doc) -> вспомогательная > (recv_doc.id_doc и recv_doc.id_recv) -> вспомогательная к вспомогательной > (nal_doc.id_recv), т.е. связь айдишек именно в такой последовательности идет. from tab1 join tab2 on ... join tab3 on ... join tab4 on ... и так далее. однако... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2011, 15:57 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
MasterZivOn 22.07.2011 14:34, Imperous wrote: > хм > у меня получается такая цепочка: главная (document.id_doc) -> вспомогательная > (recv_doc.id_doc и recv_doc.id_recv) -> вспомогательная к вспомогательной > (nal_doc.id_recv), т.е. связь айдишек именно в такой последовательности идет. from tab1 join tab2 on ... join tab3 on ... join tab4 on ... и так далее. from tab1 join tab2 on tab2.key = tab1.key join tab3 on tab3.key = tab2.key join tab4 on tab4.key = tab3.key ... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2011, 08:24 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
Zhora, TAB = 4 ischezaet kak-to ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2011, 08:27 |
|
Оптимизатор сошел с ума :( ASE 12.5
|
|||
---|---|---|---|
#18+
Вовчик, это знак, что пора менять работу! Ж) А если по существу, то форсплан помогает, так и пользуйся им. Только в фоксе замути формочку шаблончик, где будешь перекомпилить процедурки. Ну и стоит посмотреть запросики, после которых статискика портится. Я дум аю, что это происходит после некоторых массовых упдейтив или инсертов в отчетные периоды бухгалтерии. В бухе или может в основных фондах. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2011, 18:58 |
|
|
start [/forum/topic.php?fid=55&msg=37359263&tid=2010271]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
793ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 902ms |
0 / 0 |