中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

Oracle 19c新功能實時統(tǒng)計

發(fā)布于:2021-02-21 00:00:51

0

784

0

Oracle Oracle 19c 實時統(tǒng)計 數(shù)據(jù)庫

在數(shù)據(jù)倉庫環(huán)境中,我們經(jīng)常遇到表被截斷,新數(shù)據(jù)(通常是數(shù)百萬行)被刪除的情況上膛了,但是當(dāng)報表運行在那些帶有新加載數(shù)據(jù)的表上時,除非我們?nèi)ナ占碌慕y(tǒng)計數(shù)據(jù),否則優(yōu)化器可能會選擇一個次優(yōu)的計劃。

因此,為了解決這個問題,Oracle Database 12c引入了在線統(tǒng)計數(shù)據(jù)收集,但這僅適用于那些通過CREATE TABLE AS SELECT語句以及使用APPEND提示的直接路徑插入加載數(shù)據(jù)的表。

Oracle Database 19c引入了實時統(tǒng)計,它將在線統(tǒng)計數(shù)據(jù)收集擴展到也包括常規(guī)的DML語句。

統(tǒng)計信息通常由在數(shù)據(jù)庫維護窗口中運行的自動統(tǒng)計信息收集作業(yè)收集,但這只是每天一次。

但是對于易失性表,在DBMS_STATS作業(yè)執(zhí)行之間,統(tǒng)計信息可能會過時,因此新的oracle19c實時統(tǒng)計信息功能可以幫助優(yōu)化器為此類易失性表生成更優(yōu)化的計劃。

大容量加載操作將收集所有必要的統(tǒng)計信息(在oracle19c之前的行為),但是實時統(tǒng)計信息將增強而不是取代傳統(tǒng)的統(tǒng)計信息。

我們有一個名為MYOBJECTS c的表,當(dāng)前有47974行。

SQL> select distinct object_type from myobjects_19c where owner='SYS';

OBJECT_TYPE
-----------------------
INDEX
CLUSTER
TABLE PARTITION
...
...
VIEW
JAVA RESOURCE

26 rows selected.

SQL> select * from table (dbms_xplan.display_cursor);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID 8rbtnvw2uw67f, child number 0
-------------------------------------
select distinct object_type from myobjects_19c where owner='SYS'

Plan hash value: 1625058500

------------------------------------------------------------------------------------
| Id  | Operation   | Name   | Rows  | Bytes | Cost (%CPU)| Time   |
------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |   |   |   |   258 (100)|   |
|   1 |  HASH UNIQUE   |   | 26 |   364 |   258   (1)| 00:00:01 |
|*  2 |   TABLE ACCESS FULL| MYOBJECTS_19C | 47974 |   655K|   257   (1)| 00:00:01 |
------------------------------------------------------------------------------------

我們現(xiàn)在在表中插入一些額外的行–基本上將表中的行數(shù)增加一倍。

在早期版本中,優(yōu)化器現(xiàn)在有可能選擇次優(yōu)計劃,因為它“不知道”表上發(fā)生了一些DML活動,現(xiàn)在表中的行數(shù)增加了兩倍。

但是現(xiàn)在在oracle19c中,我們可以看到,作為INSERT語句的一部分,優(yōu)化器的統(tǒng)計信息收集操作也被執(zhí)行了。

SQL> insert into myobjects_19c
   select * from myobjects;

47974 rows created.

SQL> commit;

Commit complete.

SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(format=>'TYPICAL'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID ahudb149n8f2f, child number 0
-------------------------------------
insert into myobjects_19c select * from myobjects

Plan hash value: 3078646338

--------------------------------------------------------------------------------------------------
| Id  | Operation | Name | Rows  | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------------------
|   0 | INSERT STATEMENT | | | |   273 (100)| |
|   1 |  LOAD TABLE CONVENTIONAL | MYOBJECTS_19C | | |      | |
|   2 |   OPTIMIZER STATISTICS GATHERING | | 47974 |    11M|   273   (1)| 00:00:01 |
|   3 |    TABLE ACCESS FULL | MYOBJECTS | 47974 |    11M|   273   (1)| 00:00:01 |
--------------------------------------------------------------------------------------------------

Note
-----
  - dynamic statistics used: statistics for conventional DML

當(dāng)SQL語句發(fā)生硬解析時,我們可以看到優(yōu)化器檢測到表中添加了其他行。

這也在注釋部分指出:使用的動態(tài)統(tǒng)計信息:常規(guī)DML的統(tǒng)計信息。

SQL> EXEC DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;

PL/SQL procedure successfully completed.

SQL> alter system flush shared_pool;

System altered.

SQL> select distinct object_type from myobjects_19c where owner='SYS';

OBJECT_TYPE
-----------------------
INDEX
CLUSTER
TABLE PARTITION
...
...
VIEW
JAVA RESOURCE

26 rows selected.

SQL> select * from table (dbms_xplan.display_cursor);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID 8rbtnvw2uw67f, child number 0
-------------------------------------
select distinct object_type from myobjects_19c where owner='SYS'

Plan hash value: 1625058500

------------------------------------------------------------------------------------
| Id  | Operation   | Name   | Rows  | Bytes | Cost (%CPU)| Time   |
------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |   |   |   |   624 (100)|   |
|   1 |  HASH UNIQUE   |   | 26 |  2054 |   624   (1)| 00:00:01 |
|*  2 |   TABLE ACCESS FULL| MYOBJECTS_19C | 95948 |  7402K|   621   (1)| 00:00:01 |
------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

  2 - filter("OWNER"='SYS')

Note
-----
  - dynamic statistics used: statistics for conventional DML

實時統(tǒng)計信息以表示STATS_ON_CONVENTIONAL_DML在NOTES列中的* _TAB_STATISTICS和* _TAB_COL_STATISTICS意見。

SQL> SELECT NUM_ROWS, BLOCKS, NOTES  FROM   USER_TAB_STATISTICS WHERE  TABLE_NAME = 'MYOBJECTS_19C' ;   NUM_ROWS     BLOCKS NOTES ---------- ---------- --------------------------------------------------      47974   938      95948  2284 STATS_ON_CONVENTIONAL_DML