powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / set statistics: странность после удаления и заливки, если не делать промежут. commit
11 сообщений из 11, страница 1 из 1
set statistics: странность после удаления и заливки, если не делать промежут. commit
    #38650446
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
set statistics: странность после удаления и заливки, если не делать промежут. commit
    #38650455
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидПочему set statistics index не обновляет инфу, если не делать commit "на каждый чих"Потому, что это DDL
...
Рейтинг: 0 / 0
set statistics: странность после удаления и заливки, если не делать промежут. commit
    #38650655
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
set statistics: странность после удаления и заливки, если не делать промежут. commit
    #38650669
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пересчет статистики происходит по коммиту, как и любой DDL. То, на что ты смотришь в трейсе, никак тебе это не отображает.
...
Рейтинг: 0 / 0
set statistics: странность после удаления и заливки, если не делать промежут. commit
    #38650680
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
set statistics: странность после удаления и заливки, если не делать промежут. commit
    #38650723
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты удалил записи, которые давали хорошую селективность, и залил записи, дающие плохую селективность.
Всё в одной тр-ции. Мусор не собран. В индексе 2N записей, а не N.
Ы ?
...
Рейтинг: 0 / 0
set statistics: странность после удаления и заливки, если не делать промежут. commit
    #38650739
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
set statistics: странность после удаления и заливки, если не делать промежут. commit
    #38650746
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидфоновый сборщик собрать мусор после commit'a
у тебя супер? ты подождал? фоновый сборщик, все же, не мгновенно мусор убирает.
...
Рейтинг: 0 / 0
set statistics: странность после удаления и заливки, если не делать промежут. commit
    #38650751
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvТаблоидфоновый сборщик собрать мусор после commit'aу тебя супер? ты подождал? фоновый сборщик, все же, не мгновенно мусор убирает.да, супер.
А скока ждать надо ? ;-) (всё же изначально руками набиралось, секунд 5-7 точно проходило)
...
Рейтинг: 0 / 0
set statistics: странность после удаления и заливки, если не делать промежут. commit
    #38650781
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидРазве не должен был фоновый сборщик собрать мусор после commit 'a, который указан непосредственно перед set statistics index ?Нет, ибо OST двигается совсем не коммитом.
А пока OST не подвинут, удалённые версии не считаются мусором.
...
Рейтинг: 0 / 0
set statistics: странность после удаления и заливки, если не делать промежут. commit
    #38650782
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvу тебя супер? ты подождал? фоновый сборщик, все же, не мгновенно мусор убирает.В данном тесте это будет практически мгновенно
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / set statistics: странность после удаления и заливки, если не делать промежут. commit
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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