Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Странная работа с индексами в FB2.5 / 8 сообщений из 8, страница 1 из 1
15.07.2019, 17:18
    #39837554
maloletov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная работа с индексами в FB2.5
Столкнулся со странной работой с индексами. Поправьте пожалуйста, что я делаю не так.
Есть таблица
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE T_CUSTOMER_CONFIRM_ITER1 (
    ID         D_ID /* D_ID = BIGINT NOT NULL */,
    D_ADD      D_DT /* D_DT = TIMESTAMP DEFAULT CURRENT_TIMESTAMP */,
    ROW_ID     D_CH21 /* D_CH21 = VARCHAR(21) */,
    ITER_ID    D_CH21 /* D_CH21 = VARCHAR(21) */,
    STATE      D_CH20 /* D_CH20 = VARCHAR(21) */,
    NOTE       D_CH1024 /* D_CH1024 = VARCHAR(1024) */,
    SR_NUMBER  D_CH21 /* D_CH21 = VARCHAR(21) */
);
ALTER TABLE T_CUSTOMER_CONFIRM_ITER1 ADD CONSTRAINT PK_T_CUSTOMER_CONFIRM_ITER1 PRIMARY KEY (ID);
CREATE INDEX T_CUSTOMER_CONFIRM_ITER1_IDX1 ON T_CUSTOMER_CONFIRM_ITER1 (ITER_ID);
CREATE INDEX T_CUSTOMER_CONFIRM_ITER1_IDX2 ON T_CUSTOMER_CONFIRM_ITER1 (STATE);



В таблице примерно 170 тыс. записей.
1. Выполняю запрос типа
Код: sql
1.
select * from T_CUSTOMER_CONFIRM_ITER1 where state='Назначено'


Получаю вот такой план PLAN (T_CUSTOMER_CONFIRM_ITER1 INDEX (T_CUSTOMER_CONFIRM_ITER1_IDX2))
и статистку
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
------ Информация о производительности ------
Время подготовки запроса = 297ms
Время выполнения запроса = 31ms
Current memory = 245 924 200
Max memory = 344 115 728
Memory buffers = 2 048
Reads from disk to cache = 59
Writes from cache to disk = 24
Чтений из кэша = 0



2. Выполняю запрос типа
Код: sql
1.
select * from T_CUSTOMER_CONFIRM_ITER1 where state='В процессе'


Получаю вот такой план PLAN (T_CUSTOMER_CONFIRM_ITER1 INDEX (T_CUSTOMER_CONFIRM_ITER1_IDX2))
и статистку
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Время подготовки запроса = 187ms
Время выполнения запроса = 27s 722ms
Current memory = 246 139 168
Max memory = 344 115 728
Memory buffers = 2 048
Reads from disk to cache = 13 287
Writes from cache to disk = 5 076

+--------------------------+-----------+-----------+-------------+---------+---------+---------+
|        Table Name        |  Records  |  Indexed  | Non-Indexed | Updates | Deletes | Inserts |
|                          |   Total   |   reads   |    reads    |         |         |         |
+--------------------------+-----------+-----------+-------------+---------+---------+---------+
|  T_CUSTOMER_CONFIRM_ITER1|         0 |     58841 |           0 |       0 |       0 |       0 |
+--------------------------+-----------+-----------+-------------+---------+---------+---------+



3. Но если выполнить запрос типа
Код: sql
1.
select * from T_CUSTOMER_CONFIRM_ITER1 where state starting with 'В процессе%'


Получаю вот такой план PLAN (T_CUSTOMER_CONFIRM_ITER1 INDEX (T_CUSTOMER_CONFIRM_ITER1_IDX2))
и статистку
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
------ Информация о производительности ------
Время подготовки запроса = 125ms
Время выполнения запроса = 0ms
Current memory = 245 785 008
Max memory = 344 115 728
Memory buffers = 2 048
Reads from disk to cache = 173
Writes from cache to disk = 52
Чтений из кэша = 0



Вопрос, почему в вариантах 2 и 3 такая разница в скорости и почему вариант 2 так долго выполняется?
...
Рейтинг: 0 / 0
15.07.2019, 17:39
    #39837564
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная работа с индексами в FB2.5
Очевидно, варианту 2 не повезло наткнуться на кучу мусора и собрать его.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.07.2019, 07:48
    #39837696
pastor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная работа с индексами в FB2.5
maloletov,

1. В статистике выполнения не видно самого главного параметра Fetches from cache = xxxxx
...
Рейтинг: 0 / 0
16.07.2019, 08:29
    #39837701
maloletov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная работа с индексами в FB2.5
pastor, во всех трех вариантах Чтений из кэша = 0.
Dimitry Sibiryakov, спасибо. Соберу мусор на базе, посмотрю на результат.
...
Рейтинг: 0 / 0
16.07.2019, 11:21
    #39837784
pastor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная работа с индексами в FB2.5
maloletov,

так не бывает. если кто-то где-то сделал 58 000 индексных чтения

Prepare time = 0ms
Execute time = 31ms
Current memory = 35 799 184
Max memory = 36 882 952
Memory buffers = 2 048
Reads from disk to cache = 28
Writes from cache to disk = 2
Fetches from cache = 28 113
...
Рейтинг: 0 / 0
16.07.2019, 13:15
    #39837863
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная работа с индексами в FB2.5
pastorтак не бывает. если кто-то где-то сделал 58 000 индексных чтения

Так бывает если кто-то использует IBExpert с багом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.07.2019, 13:15
    #39837864
maloletov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная работа с индексами в FB2.5
pastor, вот отчет из IBExpert
Код: sql
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.
Query
------------------------------------------------
select * from T_CUSTOMER_CONFIRM_ITER1 where state='В процессе'

Plan
------------------------------------------------
PLAN (T_CUSTOMER_CONFIRM_ITER1 INDEX (T_CUSTOMER_CONFIRM_ITER1_IDX2))

Query Time
------------------------------------------------
Prepare       : 93,00 ms
Execute       : 39 422,00 ms
Avg fetch time: 0,00 ms

Memory
------------------------------------------------
Current: 240 619 848
Max    : 345 260 560
Buffers: 2 048

Operations
------------------------------------------------
Read   : 26 228
Writes : 5 408
Fetches: 0


Enchanced Info:
+--------------------------+-----------+-----------+-------------+---------+---------+---------+
|        Table Name        |  Records  |  Indexed  | Non-Indexed | Updates | Deletes | Inserts |
|                          |   Total   |   reads   |    reads    |         |         |         |
+--------------------------+-----------+-----------+-------------+---------+---------+---------+
|  T_CUSTOMER_CONFIRM_ITER1|         0 |     78687 |           0 |       0 |       0 |       0 |
+--------------------------+-----------+-----------+-------------+---------+---------+---------+

План
PLAN (T_CUSTOMER_CONFIRM_ITER1 INDEX (T_CUSTOMER_CONFIRM_ITER1_IDX2))

------ Информация о производительности ------
Время подготовки запроса = 125ms
Время выполнения запроса = 33s 57ms
Current memory = 240 865 592
Max memory = 345 260 560
Memory buffers = 2 048
Reads from disk to cache = 66 192
Writes from cache to disk = 4 688
Чтений из кэша = 0

...
Рейтинг: 0 / 0
16.07.2019, 14:13
    #39837881
pastor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная работа с индексами в FB2.5
maloletovpastor, вот отчет из IBExpert
Код: sql
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.
Query
------------------------------------------------
select * from T_CUSTOMER_CONFIRM_ITER1 where state='В процессе'

Plan
------------------------------------------------
PLAN (T_CUSTOMER_CONFIRM_ITER1 INDEX (T_CUSTOMER_CONFIRM_ITER1_IDX2))

Query Time
------------------------------------------------
Prepare       : 93,00 ms
Execute       : 39 422,00 ms
Avg fetch time: 0,00 ms

Memory
------------------------------------------------
Current: 240 619 848
Max    : 345 260 560
Buffers: 2 048

Operations
------------------------------------------------
Read   : 26 228
Writes : 5 408
Fetches: 0


Enchanced Info:
+--------------------------+-----------+-----------+-------------+---------+---------+---------+
|        Table Name        |  Records  |  Indexed  | Non-Indexed | Updates | Deletes | Inserts |
|                          |   Total   |   reads   |    reads    |         |         |         |
+--------------------------+-----------+-----------+-------------+---------+---------+---------+
|  T_CUSTOMER_CONFIRM_ITER1|         0 |     78687 |           0 |       0 |       0 |       0 |
+--------------------------+-----------+-----------+-------------+---------+---------+---------+

План
PLAN (T_CUSTOMER_CONFIRM_ITER1 INDEX (T_CUSTOMER_CONFIRM_ITER1_IDX2))

------ Информация о производительности ------
Время подготовки запроса = 125ms
Время выполнения запроса = 33s 57ms
Current memory = 240 865 592
Max memory = 345 260 560
Memory buffers = 2 048
Reads from disk to cache = 66 192
Writes from cache to disk = 4 688
Чтений из кэша = 0



таки пройдусь шкуркой 60 по хрустальному шару:

если сервер занимался 31 секунду и не сделал ни одного фетча ни из индекса, ни из данных, при этом страницы с диска читал и индексные чтения таки делал - то кто-то врет.

или топикпостер, или сервер, или то, чем получают статистику.
то, чем получают можно легко и быстро заменить на isql.

потом сравнить полученную цифру с MaxInt и долго думать.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Странная работа с индексами в FB2.5 / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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