powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Выполнение запроса по плану
9 сообщений из 9, страница 1 из 1
Выполнение запроса по плану
    #34174023
Andrey Sribnyak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Имеем два сервера ASE 12.0 and 12.5
c полностью идентичной структурой и данными

имеем запрос:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECT LS_AGEN as debet , 0  as credit, count(*) as counts
FROM rd_2006..RD   
LEFT JOIN vicont..LS ON RD_LS2 = LS_NOM
WHERE substring(RD_SPECTXT, 1 , 1 )<>'~'  
  AND RD_DATE Between '20061001' and  '20061030' 
  AND RD_MFO1<>RD_MFO2 
  and LS_CRNCY= 980 
GROUP BY LS_AGEN

union all

SELECT  0 , LS_AGEN as credit, count(*) as counts
FROM rd_2006..RD  
LEFT JOIN vicont..LS ON RD_LS1 = LS_NOM
WHERE RD_SPECTXT is null 
  AND RD_DATE Between '20061001' and  '20061030' 
  AND (RD_MFO1<>RD_MFO2) and  LS_CRNCY= 980 
GROUP BY LS_AGEN

Имеем план выполнения запроса на сервере ASE 12.0
++++++++++++++++++++++++++++++++++++++++++++


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
QUERY PLAN FOR STATEMENT 1 (at line 1).


    STEP 1
        The type of query is INSERT.
        The update mode is direct.
        Worktable2 created for REFORMATTING.

        FROM TABLE
            vicont..LS
        Nested iteration.
        Table Scan.
        Forward scan.
        Positioning at start of table.
        Using I/O Size 2 Kbytes for data pages.
        With LRU Buffer Replacement Strategy for data pages.
        TO TABLE
            Worktable2.

    STEP 2
        The type of query is SELECT (into Worktable1).
        GROUP BY
        Evaluate Grouped COUNT AGGREGATE.

        FROM TABLE
            rd_2006..RD
        Nested iteration.
        Index : RD_DATE_MFO
        Forward scan.
        Positioning by key.
        Keys are:
            RD_DATE  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
            Worktable2.
        Nested iteration.
        Using Clustered Index.
        Forward scan.
        Positioning by key.
        Using I/O Size 2 Kbytes for data pages.
        With LRU Buffer Replacement Strategy for data pages.
        TO TABLE
            Worktable1.

    STEP 3
        The type of query is SELECT.

        FROM TABLE
            Worktable1.
        Nested iteration.
        Table Scan.
        Forward scan.
        Positioning at start of table.
        Using I/O Size 2 Kbytes for data pages.
        With MRU Buffer Replacement Strategy for data pages.

    STEP 1
        The type of query is INSERT.
        The update mode is direct.
        Worktable4 created for REFORMATTING.

        FROM TABLE
            vicont..LS
        Nested iteration.
        Table Scan.
        Forward scan.
        Positioning at start of table.
        Using I/O Size 2 Kbytes for data pages.
        With LRU Buffer Replacement Strategy for data pages.
        TO TABLE
            Worktable4.

    STEP 2
        The type of query is SELECT (into Worktable3).
        GROUP BY
        Evaluate Grouped COUNT AGGREGATE.

        FROM TABLE
            rd_2006..RD
        Nested iteration.
        Index : RD_DATE_MFO
        Forward scan.
        Positioning by key.
        Keys are:
            RD_DATE  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
            Worktable4.
        Nested iteration.
        Using Clustered Index.
        Forward scan.
        Positioning by key.
        Using I/O Size 2 Kbytes for data pages.
        With LRU Buffer Replacement Strategy for data pages.
        TO TABLE
            Worktable3.

    STEP 3
        The type of query is SELECT.

        FROM TABLE
            Worktable3.
        Nested iteration.
        Table Scan.
        Forward scan.
        Positioning at start of table.
        Using I/O Size 2 Kbytes for data pages.
        With MRU Buffer Replacement Strategy for data pages.

The sort for Worktable2 is done in Serial
The sort for Worktable4 is done in Serial
(50 rows affected)

++++++++++++++++++++++++++++++++++++++++++++++++++++++

и план выполнения запроса на сервере ASE 12.5

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
QUERY PLAN FOR STATEMENT 1 (at line 1).


    STEP 1
        The type of query is SELECT (into Worktable1).
        GROUP BY
        Evaluate Grouped COUNT AGGREGATE.

        FROM TABLE
            rd_2006..RD
        Nested iteration.
        Index : RD_DATE_MFO
        Forward scan.
        Positioning by key.
        Keys are:
            RD_DATE  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
            vicont..LS
        Nested iteration.
        Table Scan.
        Forward scan.
        Positioning at start of table.
        Using I/O Size 2 Kbytes for data pages.
        With LRU Buffer Replacement Strategy for data pages.
        TO TABLE
            Worktable1.

    STEP 2
        The type of query is SELECT.

        FROM TABLE
            Worktable1.
        Nested iteration.
        Table Scan.
        Forward scan.
        Positioning at start of table.
        Using I/O Size 2 Kbytes for data pages.
        With MRU Buffer Replacement Strategy for data pages.

    STEP 1
        The type of query is SELECT (into Worktable2).
        GROUP BY
        Evaluate Grouped COUNT AGGREGATE.

        FROM TABLE
            rd_2006..RD
        Nested iteration.
        Index : RD_DATE_MFO
        Forward scan.
        Positioning by key.
        Keys are:
            RD_DATE  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
            vicont..LS
        Nested iteration.
        Table Scan.
        Forward scan.
        Positioning at start of table.
        Using I/O Size 2 Kbytes for data pages.
        With LRU Buffer Replacement Strategy for data pages.
        TO TABLE
            Worktable2.

    STEP 2
        The type of query is SELECT.

        FROM TABLE
            Worktable2.
        Nested iteration.
        Table Scan.
        Forward scan.
        Positioning at start of table.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

В результате данный запрос на ASE 12 выполняется меньше чем за минуту, на ASE12.5 более суток

вопрос:
Как заставить выполнятся данный запрос на сервере ASE12.5 по плану ASE12.0?


Количество записей в таблице RD - 7 млн
количество записей в таблице LS - 300 тыс
...
Рейтинг: 0 / 0
Выполнение запроса по плану
    #34174077
лень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сам запрос видимо не приведен из соображений секретности? :)
Хотелось бы видеть:
- сам запрос
- структуру таблиц, участвующих в данном запросе и индексы на них

А также - как давно обновлялась статистика по таблицам на 12.5?

Если же хочется приколотить запрос гвоздями -
set forecplan on + hint'ы на индексы (index ...)
...
Рейтинг: 0 / 0
Выполнение запроса по плану
    #34174085
лень
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извини, не увидел запроса, ты бы его отформатировал бы что ли :)
вопрос насчет индексов и всего остального остается актуальным
...
Рейтинг: 0 / 0
Выполнение запроса по плану
    #34174214
Andrey Sribnyak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сервер 12.5 был недавно только создан. перелил bcp'oй с 12.0
поэтому статистику еще не обновлял

индексы.
в таблице RD есть 4 индекса
RD_DATE_MFO (RD_DATE, RD_MFO) (я так понял, если судить по статистике используется только он)
RD_LSC (RD_MFO, RD_LSC, RD_LSC_CRNCY, RD_DATE)
RD_LSD
RD_MFO_DATE (RD_MFO, RD_DATE)
...
Рейтинг: 0 / 0
Выполнение запроса по плану
    #34174247
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey Sribnyakсервер 12.5 был недавно только создан. перелил bcp'oй с 12.0
поэтому статистику еще не обновлял


ПЛОХО! Обновляй. Иначе сервер считает, что таблицы у тебя пустые
...
Рейтинг: 0 / 0
Выполнение запроса по плану
    #34174290
Andrey Sribnyak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а автообновление статистики только начиная с 15 работает? :-)
просто интересно.. в плане пишет, что индексы использует.. .как же он их тогда использует? :-)
...
Рейтинг: 0 / 0
Выполнение запроса по плану
    #34174367
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SELECT LS_AGEN as debet , 0  as credit, count(*) as counts
FROM rd_2006..RD   
LEFT JOIN vicont..LS ON RD_LS2 = LS_NOM
WHERE substring(RD_SPECTXT, 1 , 1 )<>'~'  // Это можно бы было заменить на RD_SPECTXT LIKE '~%' - оно то же самое, но может потенциально использовать индекс по RD_SPECTXT.
  AND RD_DATE Between '20061001' and  '20061030'  // Это - единственный SARG, так ?
  AND RD_MFO1<>RD_MFO2 
  and LS_CRNCY= 980 
GROUP BY LS_AGEN

union all

SELECT  0 , LS_AGEN as credit, count(*) as counts
FROM rd_2006..RD  
LEFT JOIN vicont..LS ON RD_LS1 = LS_NOM
WHERE RD_SPECTXT is null 
  AND RD_DATE Between '20061001' and  '20061030' 
  AND (RD_MFO1<>RD_MFO2) 
  and  LS_CRNCY= 980 
GROUP BY LS_AGEN

Имеем план выполнения запроса на сервере ASE 12.0
++++++++++++++++++++++++++++++++++++++++++++


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
QUERY PLAN FOR STATEMENT 1 (at line 1).


    STEP 1
        The type of query is INSERT.
        The update mode is direct.
        Worktable2 created for REFORMATTING.  // ПЛОХО !! Строится временный индекс по таблице в 300 k записей !

        FROM TABLE
            vicont..LS
        Nested iteration.
        Table Scan.
        Forward scan.
        Positioning at start of table.
        Using I/O Size 2 Kbytes for data pages.
        With LRU Buffer Replacement Strategy for data pages.
        TO TABLE
            Worktable2.

    STEP 2
        The type of query is SELECT (into Worktable1).
        GROUP BY
        Evaluate Grouped COUNT AGGREGATE.

        FROM TABLE
            rd_2006..RD
        Nested iteration.
        Index : RD_DATE_MFO
        Forward scan.
        Positioning by key.
        Keys are:
            RD_DATE  ASC  // ХОРОШО ! SARG использует индекс !!
        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
            Worktable2.
        Nested iteration.
        Using Clustered Index.
        Forward scan.
        Positioning by key.
        Using I/O Size 2 Kbytes for data pages.
        With LRU Buffer Replacement Strategy for data pages.
        TO TABLE
            Worktable1.

    STEP 3
        The type of query is SELECT.

        FROM TABLE
            Worktable1.
        Nested iteration.
        Table Scan. 
        Forward scan.
        Positioning at start of table.
        Using I/O Size 2 Kbytes for data pages.
        With MRU Buffer Replacement Strategy for data pages.

    STEP 1
        The type of query is INSERT.
        The update mode is direct.
        Worktable4 created for REFORMATTING.  // ПЛОХО !! Строится временный индекс по таблице в 300 k записей !

        FROM TABLE
            vicont..LS
        Nested iteration.
        Table Scan.
        Forward scan.
        Positioning at start of table.
        Using I/O Size 2 Kbytes for data pages.
        With LRU Buffer Replacement Strategy for data pages.
        TO TABLE
            Worktable4.

    STEP 2
        The type of query is SELECT (into Worktable3).
        GROUP BY
        Evaluate Grouped COUNT AGGREGATE.

        FROM TABLE
            rd_2006..RD
        Nested iteration.
        Index : RD_DATE_MFO
        Forward scan.
        Positioning by key.
        Keys are:
            RD_DATE  ASC // Хорошо, SARG использует индекс
        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
            Worktable4.
        Nested iteration.
        Using Clustered Index.
        Forward scan.
        Positioning by key.
        Using I/O Size 2 Kbytes for data pages.
        With LRU Buffer Replacement Strategy for data pages.
        TO TABLE
            Worktable3.

    STEP 3
        The type of query is SELECT.

        FROM TABLE
            Worktable3.
        Nested iteration.
        Table Scan.
        Forward scan.
        Positioning at start of table.
        Using I/O Size 2 Kbytes for data pages.
        With MRU Buffer Replacement Strategy for data pages.

The sort for Worktable2 is done in Serial
The sort for Worktable4 is done in Serial
(50 rows affected)

++++++++++++++++++++++++++++++++++++++++++++++++++++++

и план выполнения запроса на сервере ASE 12.5

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
QUERY PLAN FOR STATEMENT 1 (at line 1).


    STEP 1
        The type of query is SELECT (into Worktable1).
        GROUP BY
        Evaluate Grouped COUNT AGGREGATE.

        FROM TABLE
            rd_2006..RD
        Nested iteration.
        Index : RD_DATE_MFO
        Forward scan.
        Positioning by key.
        Keys are:
            RD_DATE  ASC // ХОРОШО ! SARG используется.
        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
            vicont..LS
        Nested iteration.
        Table Scan.  // Плохо ! В NLJ не используется индекс при JOIN-е (Потому что нет статистики и сервер считает что она пустая , эта таблица)
        Forward scan.
        Positioning at start of table.
        Using I/O Size 2 Kbytes for data pages.
        With LRU Buffer Replacement Strategy for data pages.
        TO TABLE
            Worktable1.

    STEP 2
        The type of query is SELECT.

        FROM TABLE
            Worktable1.
        Nested iteration.
        Table Scan.
        Forward scan.
        Positioning at start of table.
        Using I/O Size 2 Kbytes for data pages.
        With MRU Buffer Replacement Strategy for data pages.

    STEP 1
        The type of query is SELECT (into Worktable2).
        GROUP BY
        Evaluate Grouped COUNT AGGREGATE.

        FROM TABLE
            rd_2006..RD
        Nested iteration.
        Index : RD_DATE_MFO
        Forward scan.
        Positioning by key.
        Keys are:
            RD_DATE  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
            vicont..LS
        Nested iteration.
        Table Scan.  // Ну и тут то же самое
        Forward scan.
        Positioning at start of table.
        Using I/O Size 2 Kbytes for data pages.
        With LRU Buffer Replacement Strategy for data pages.
        TO TABLE
            Worktable2.

    STEP 2
        The type of query is SELECT.

        FROM TABLE
            Worktable2.
        Nested iteration.
        Table Scan.
        Forward scan.
        Positioning at start of table.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

В результате данный запрос на ASE 12 выполняется меньше чем за минуту, на ASE12.5 более суток

Ну чтобы на 12/5 заставить запрос работать достаточно просто обновить статистику

Как заставить выполнятся данный запрос на сервере ASE12.5 по плану ASE12.0?

Планы плохи и на 12, и на 12.5. Зачем вы хотите и на 12.5 иметь такой же плохой
план , как и на 12.0 -- я не понимаю.

Количество записей в таблице RD - 7 млн
количество записей в таблице LS - 300 тыс

Очевидно что для нормального выполнения этого запроса на обоих версиях сервера не хватает
индекса по полу LS_NOM, который нужен для выполнения JOIN-а по условию RD_LS2 = LS_NOM с использованием
индекса.
...
Рейтинг: 0 / 0
Выполнение запроса по плану
    #34174443
Andrey Sribnyak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на самом деле обновил статистику на ASE 12.5

update statistics RD
sp_statistics RD

все начало работать, так как нужно.
Всем спасибо
...
Рейтинг: 0 / 0
Выполнение запроса по плану
    #34177815
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИНДЕКС ДОБАФ !!
Не будет оно без индекса хорошо работать ....
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Выполнение запроса по плану
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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