Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / set statistics: странность после удаления и заливки, если не делать промежут. commit / 11 сообщений из 11, страница 1 из 1
23.05.2014, 15:44:54
    #38650446
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
set statistics: странность после удаления и заливки, если не делать промежут. commit
hi all

Дано: новая база, работаю в единственном коннекте.
Почему set statistics index не обновляет инфу, если не делать commit "на каждый чих" (выделен красным цветом) ?

Код: 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.
$ /opt/fb30trnk/bin/isql localhost/3333:/var/db/fb30/tmpidx.fdb
Database:  localhost/3333:/var/db/fb30/tmpidx.fdb

SQL> -------------------------------   v a r.  1  --------------------------------------
SQL> recreate table t(x int); commit;
SQL> insert into t select rand()*20000 from rdb$types,rdb$types; commit;
SQL> create index t_x on t(x); commit;
SQL> set list on;
SQL> select ri.rdb$index_name, ri.rdb$statistics from rdb$indices ri where ri.rdb$relation_name = 'T';

RDB$INDEX_NAME                  T_X                                                                                         
RDB$STATISTICS                  5.193995821173303e-05


SQL> commit;
SQL> delete from t;  commit; 
SQL> insert into t select rand()*10 from rdb$types,rdb$types; commit;
SQL> set statistics index t_x; commit;
SQL> select ri.rdb$index_name, ri.rdb$statistics from rdb$indices ri where ri.rdb$relation_name = 'T';

RDB$INDEX_NAME                  T_X                                                                                         
RDB$STATISTICS                  0.09090909361839294
-- OK, всё пучком.

SQL> -------------------------------   v a r.  2  --------------------------------------
SQL> recreate table t(x int); commit;
SQL> insert into t select rand()*20000 from rdb$types,rdb$types; commit;
SQL> create index t_x on t(x); commit;
SQL> set list on;
SQL> select ri.rdb$index_name, ri.rdb$statistics from rdb$indices ri where ri.rdb$relation_name = 'T';

RDB$INDEX_NAME                  T_X                                                                                         
RDB$STATISTICS                  5.220024104346521e-05


SQL> commit;
SQL> delete from t;
SQL> insert into t select rand()*10 from rdb$types,rdb$types; commit;
SQL> set statistics index t_x; commit;
SQL> select ri.rdb$index_name, ri.rdb$statistics from rdb$indices ri where ri.rdb$relation_name = 'T';

RDB$INDEX_NAME                  T_X                                                                                         
RDB$STATISTICS                   5.225206405157223e-05 
 -- Ы ? 
...
Рейтинг: 0 / 0
23.05.2014, 15:59:23
    #38650455
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
set statistics: странность после удаления и заливки, если не делать промежут. commit
ТаблоидПочему set statistics index не обновляет инфу, если не делать commit "на каждый чих"Потому, что это DDL
...
Рейтинг: 0 / 0
23.05.2014, 18:43:34
    #38650655
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
set statistics: странность после удаления и заливки, если не делать промежут. commit
hvladТаблоидПочему set statistics index не обновляет инфу, если не делать commit "на каждый чих"Потому, что это DDLя вижу по трейсу, что это (set statistics index ...) отражается вот этими строками:
Код: 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.
2014-05-23T18:36:28.8920 (6399:0x7f7537349738) EXECUTE_STATEMENT_FINISH
        /var/db/fb30/tmpidx.fdb (ATT_18, SYSDBA:NONE, NONE, TCPv4:127.0.0.1)
        /opt/fb30trnk/bin/isql:28639
                (TRA_87, CONCURRENCY | WAIT | READ_WRITE)

-------------------------------------------------------------------------------
set statistics index t_x
0 records fetched
      0 ms

2014-05-23T18:36:28.8930 (6399:0x7f7537349738) EXECUTE_STATEMENT_FINISH
        /var/db/fb30/tmpidx.fdb (ATT_18, SYSDBA:NONE, NONE, TCPv4:127.0.0.1)
        /opt/fb30trnk/bin/isql:28639
                ( TRA_0 , CONCURRENCY | WAIT | READ_WRITE)

Statement 126:
-------------------------------------------------------------------------------
 select rel.rdb$relation_id, rel.rdb$relation_type from rdb$indices idx join rdb$relations rel using (rdb$relation_name) where idx.rdb$index_name = ?   and rel.rdb$relation_id is not null
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PLAN JOIN (IDX INDEX (RDB$INDEX_5), REL INDEX (RDB$INDEX_0))

param0 = varchar(93), "T_X"

1 records fetched
      0 ms, 8 fetch(es)

Table                             Natural     Index    Update    Insert    Delete   Backout     Purge   Expunge
***************************************************************************************************************
RDB$INDICES                                       1
RDB$RELATIONS                                     1

2014-05-23T18:36:28.8940 (6399:0x7f7537349738) EXECUTE_STATEMENT_FINISH
        /var/db/fb30/tmpidx.fdb (ATT_18, SYSDBA:NONE, NONE, TCPv4:127.0.0.1)
        /opt/fb30trnk/bin/isql:28639
                ( TRA_0 , CONCURRENCY | WAIT | READ_WRITE)

Statement 127:
-------------------------------------------------------------------------------
 select rel.rdb$relation_id, rel.rdb$relation_type from rdb$indices idx join rdb$relations rel using (rdb$relation_name) where idx.rdb$index_name = ?   and rel.rdb$relation_id is not null
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PLAN JOIN (IDX INDEX (RDB$INDEX_5), REL INDEX (RDB$INDEX_0))

param0 = varchar(93), "T_X"

1 records fetched
      0 ms, 8 fetch(es)

Table                             Natural     Index    Update    Insert    Delete   Backout     Purge   Expunge
***************************************************************************************************************
RDB$INDICES                                       1
RDB$RELATIONS                                     1

2014-05-23T18:36:28.8980 (6399:0x7f7537349738) EXECUTE_STATEMENT_FINISH
        /var/db/fb30/tmpidx.fdb (ATT_18, SYSDBA:NONE, NONE, TCPv4:127.0.0.1)
        /opt/fb30trnk/bin/isql:28639
                ( TRA_0 , CONCURRENCY | WAIT | READ_WRITE)

Неправильный результат пересчета статистики (отсутствие в нём совершенно новых данных) можно объяснить, если считать служебную TRA_0 стартовавшей *до* выполнения команды 'delete from t':
Код: plaintext
1.
2.
3.
4.
5.
SQL> commit;
--- tra_0 должна была стартовать где-то выше этой точки ---
SQL> delete from t;
SQL> insert into t select rand()*10 from rdb$types,rdb$types; commit;
SQL> set statistics index t_x; commit;
Но тогда и наличие commit'a: 'delete from t; commit;' (см var 1 в стартовом посте) - тоже влиять не должно было!
...
Рейтинг: 0 / 0
23.05.2014, 19:07:54
    #38650669
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
set statistics: странность после удаления и заливки, если не делать промежут. commit
пересчет статистики происходит по коммиту, как и любой DDL. То, на что ты смотришь в трейсе, никак тебе это не отображает.
...
Рейтинг: 0 / 0
23.05.2014, 19:31:03
    #38650680
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
set statistics: странность после удаления и заливки, если не делать промежут. commit
dimitr,

я ведь сделал коммит:
Таблоид
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SQL> commit;
SQL> delete from t;
SQL> insert into t select rand()*10 from rdb$types,rdb$types; commit;
 SQL> set statistics index t_x; commit; 
SQL> select ri.rdb$index_name, ri.rdb$statistics from rdb$indices ri where ri.rdb$relation_name = 'T';

RDB$INDEX_NAME                  T_X                                                                                         
RDB$STATISTICS                   5.225206405157223e-05 
 -- Ы ? 
...
Рейтинг: 0 / 0
23.05.2014, 20:50:23
    #38650723
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
set statistics: странность после удаления и заливки, если не делать промежут. commit
Ты удалил записи, которые давали хорошую селективность, и залил записи, дающие плохую селективность.
Всё в одной тр-ции. Мусор не собран. В индексе 2N записей, а не N.
Ы ?
...
Рейтинг: 0 / 0
23.05.2014, 21:14:00
    #38650739
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
set statistics: странность после удаления и заливки, если не делать промежут. commit
hvladВсё в одной тр-ции. Мусор не собран. В индексе 2N записей, а не N. Разве не должен был фоновый сборщик собрать мусор после commit 'a, который указан непосредственно перед set statistics index ?

Код: plaintext
1.
2.
3.
SQL> delete from t;
SQL> insert into t select rand()*10 from rdb$types,rdb$types;  commit ;
SQL> set statistics index t_x; commit;
SQL> select ri.rdb$index_name, ri.rdb$statistics from rdb$indices ri where ri.rdb$relation_name = 'T';

И если нет (не должен), то собрал бы он его в случае, если бы между insert + commit и set statistics находился бы еще какой-нить DML-оператор ?
...
Рейтинг: 0 / 0
23.05.2014, 21:24:17
    #38650746
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
set statistics: странность после удаления и заливки, если не делать промежут. commit
Таблоидфоновый сборщик собрать мусор после commit'a
у тебя супер? ты подождал? фоновый сборщик, все же, не мгновенно мусор убирает.
...
Рейтинг: 0 / 0
23.05.2014, 21:41:29
    #38650751
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
set statistics: странность после удаления и заливки, если не делать промежут. commit
kdvТаблоидфоновый сборщик собрать мусор после commit'aу тебя супер? ты подождал? фоновый сборщик, все же, не мгновенно мусор убирает.да, супер.
А скока ждать надо ? ;-) (всё же изначально руками набиралось, секунд 5-7 точно проходило)
...
Рейтинг: 0 / 0
23.05.2014, 22:38:06
    #38650781
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
set statistics: странность после удаления и заливки, если не делать промежут. commit
ТаблоидРазве не должен был фоновый сборщик собрать мусор после commit 'a, который указан непосредственно перед set statistics index ?Нет, ибо OST двигается совсем не коммитом.
А пока OST не подвинут, удалённые версии не считаются мусором.
...
Рейтинг: 0 / 0
23.05.2014, 22:38:43
    #38650782
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
set statistics: странность после удаления и заливки, если не делать промежут. commit
kdvу тебя супер? ты подождал? фоновый сборщик, все же, не мгновенно мусор убирает.В данном тесте это будет практически мгновенно
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / set statistics: странность после удаления и заливки, если не делать промежут. commit / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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