Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Выполнение запроса по плану / 9 сообщений из 9, страница 1 из 1
04.12.2006, 11:22
    #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
04.12.2006, 11:37
    #34174077
лень
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение запроса по плану
А сам запрос видимо не приведен из соображений секретности? :)
Хотелось бы видеть:
- сам запрос
- структуру таблиц, участвующих в данном запросе и индексы на них

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

Если же хочется приколотить запрос гвоздями -
set forecplan on + hint'ы на индексы (index ...)
...
Рейтинг: 0 / 0
04.12.2006, 11:39
    #34174085
лень
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение запроса по плану
извини, не увидел запроса, ты бы его отформатировал бы что ли :)
вопрос насчет индексов и всего остального остается актуальным
...
Рейтинг: 0 / 0
04.12.2006, 12:06
    #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
04.12.2006, 12:11
    #34174247
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение запроса по плану
Andrey Sribnyakсервер 12.5 был недавно только создан. перелил bcp'oй с 12.0
поэтому статистику еще не обновлял


ПЛОХО! Обновляй. Иначе сервер считает, что таблицы у тебя пустые
...
Рейтинг: 0 / 0
04.12.2006, 12:21
    #34174290
Andrey Sribnyak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение запроса по плану
а автообновление статистики только начиная с 15 работает? :-)
просто интересно.. в плане пишет, что индексы использует.. .как же он их тогда использует? :-)
...
Рейтинг: 0 / 0
04.12.2006, 12:37
    #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
04.12.2006, 12:53
    #34174443
Andrey Sribnyak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение запроса по плану
на самом деле обновил статистику на ASE 12.5

update statistics RD
sp_statistics RD

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


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