Belirli ifadelerin performansını analiz ettiğimizde, bazı bilgileri analiz edeceğiz. Tablolar, sütunlar, dizinler, histogramlar vb. Gibi, bugün esas olarak tabloların, sütunların ve dizinlerin istatistiksel bilgilerinin toplanması ve analizi hakkında konuşuyoruz.
Tablo istatistikleri:
--Sıra sayısı, blok sayısı, ortalama satır uzunluğu;
--all_tables: NUM_ROWS, BLOCKS, AVG_ROW_LEN;
Sütun istatistikleri:
-Sütundaki benzersiz değerlerin (NDV) sayısı, NULL değerlerin sayısı ve veri dağılımı;
--DBA_TAB_COLUMNS: NUM_DISTINCT, NUM_NULLS, HISTOGRAM;
Dizin istatistikleri:
- Yaprak bloklarının sayısı, derecesi, kümeleme faktörü;
--DBA_INDEXES: LEAF_BLOCKS, CLUSTERING_FACTOR, BLEVEL;
1. Tablo istatistiklerini toplayın
Sözdizimi aşağıdaki gibidir:
BAŞLA DBMS_STATS.GATHER_TABLE_STATS (OWNNAME = > '', TABNAME = > '', ESTIMATE_PERCENT = > 100, METHOD_OPT = > 'tüm sütun boyutları için çarpık', CASCADE = > DOĞRU); SON;2. Tablonun istatistiklerini görüntülemek için dba_tab_statistics'i kullanın.
SAHİBİ SEÇİN, TABLO İSMİ, PARTITION_NAME, NESNE TÜRÜ, NUM_ROWS, BLOKLAR, EMPTY_BLOCKS, AVG_SPACE, CHAIN_CNT, AVG_ROW_LEN, to_char (LAST_ANALYZED, 'yyyy-aa-gg ss24: mi: ss') LAST_ANALYZED, USER_STATS DBA_TAB_STATISTICS'TEN NEREDE SAHİBİ = 'NWPP_TEST' VE TABLE_NAME = 'T_GG_XXGL_TZGG';Buradaki bloklar, yüksek su işaretinin altındaki veri bloklarının sayısıdır ve empty_blocks, yüksek su işaretinin üstündeki veri bloklarının sayısıdır.
Dbms_stats EMPTY_BLOCKS, AVG_SPACE, CHAIN_CNT hesaplamaz. ANALYZE'ı şarj etmek için kullanabilirsiniz (ANALİZ TABLOSU < tabname > BİLGİSAYAR İSTATİSTİKLERİ)
Chain_cnt alanı, satır geçişinin ve satır bağlantılarının sayısını gösterir.
DBA_TAB_COL_STATISTICS ile sütun istatistiklerini görüntüleyin
COLUMN_NAME SEÇİN, NUM_DISTINCT, DÜŞÜK DEĞER, YÜKSEK DEĞER, YOĞUNLUK, NUM_NULLS, AVG_COL_LEN, HİSTOGRAM, NUM_BUCKETS DBA_TAB_COL_STATISTICS'TEN WHERE TABLE_NAME = 'TABLE_NAME';İstatistikleri açıklayın:
NUM_DISTINCT: Bu sütundaki benzersiz değerlerin sayısı.
LOW_VALUE: Sütunun minimum değeri. Dahili depolama biçimi olarak görüntüleyin. Dize sütunları için yalnızca ilk 32 bayt saklanır.
HIGH_VALUE: Sütunun maksimum değeri. Dahili depolama biçimi olarak görüntüleyin. Dize sütunları için yalnızca ilk 32 bayt saklanır.
YOĞUNLUK: 0 ile 1 arasında bir ondalık sayı. 0'a yakın, bu sütun için filtreleme işleminin çoğu satırı kaldırabileceği anlamına gelir. 1'e yakın, sütun için filtreleme işleminin hiçbir etkisi olmadığı anlamına gelir. Histogram yoksa DENSITY = 1 / NUM_DISTINCT.
HİSTOGRAM: Histogram bilgisi olup olmadığını ve varsa ne tür olduğunu belirtin. SIKLIK, frekans türünü temsil eder, YÜKSEKLİK DENGELİ ortalama dağıtım türünü temsil eder; değilse, HİÇBİRİ'dir.
NUM_BUCKETS: Histogramdaki grup sayısı. Bir araya getirilen benzer değerler grubunu temsil eder. Histogram en az bir bölümden oluşur. Histogram yoksa 1'dir ve maksimum bölüm sayısı 254'tür.
Buradaki LOW_VALUE ve HIGH_VALUE değerlerinin ikisi de dahili formatlardır, bu nedenle okunabilir bir formata dönüştürülmeleri gerekir. İki yöntem vardır.
1) araç takımı utl_raw tarafından sağlanan cast_to_binary_double, cast_to_binary_float, cast_to_binary_integer, cast_to_number, cast_to_nvarchar2, cast_to_raw ve cast_to_varchar2 işlevlerini kullanın. Bu işlevler, dahili depolama formatını gerçek değerlere dönüştürür.
UTL_RAW.CAST_TO_NUMBER (LOW_VALUE), UTL_RAW.CAST_TO_NUMBER (HIGH_VALUE) SEÇİN DBA_TAB_COL_STATISTICS'TEN WHERE TABLE_NAME = 'T_GG_XXGL_TZGG' AND COLUMN_NAME = 'C_DEL_DATE';2) dbms_stats tarafından sağlanan convert_raw_value, convert_raw_value_nvarchar ve convert_raw_value_rowid prosedürlerini kullanın. Bu prosedür doğrudan SQL ifadelerinde kullanılamaz ve genellikle yalnızca PL / SQL programlarında kullanılır ve nispeten nadiren kullanılır.
BİLDİRMEK L_LOW_VALUE DBA_TAB_COL_STATISTICS.LOW_VALUE% TYPE; L_HIGH_VALUE DBA_TAB_COL_STATISTICS.HIGH_VALUE% TYPE; L_VAL1 T.VAL1% TYPE; BAŞLA LOW_VALUE, HIGH_VALUE SEÇİN INTO L_LOW_VALUE, L_HIGH_VALUE DBA_TAB_COL_STATISTICS'TEN WHERE TABLE_NAME = 'T_GG_XXGL_TZGG' AND COLUMN_NAME = 'C_DEL_DATE'; DBMS_STATS.CONVERT_RAW_VALUE (L_LOW_VALUE, L_VAL1); DBMS_OUTPUT.PUT_LINE ('düşük_değer:' || L_VAL1); DBMS_STATS.CONVERT_RAW_VALUE (L_HIGH_VALUE, L_VAL1); DBMS_OUTPUT.PUT_LINE ('yüksek_değer:' || L_VAL1); SON; /1. Dizin istatistiklerini toplayın
Sözdizimi aşağıdaki gibidir:
BAŞLA SYS.DBMS_STATS.GATHER_INDEX_STATS (OwnName = > 'GZCSS_GZBH', IndName = > 'PK_T_GG_XXGL_TZGG', Estimate_Percent = > 10, Derece = > SYS.DBMS_STATS.DEFAULT_DEGREE, No_Invalidate = > YANLIŞ); SON;2. Dizin istatistiklerini görüntüleyin
IND.INDEX_NAME seçin, IND.TABLE_NAME, IND.partition_name, IND.leaf_blocks, IND.distinct_keys, IND.num_rows, IND.last_analyzed, IND.user_stats DBA_IND_STATISTICS IND'den WHERE IND.OWNER = 'GZCSS_GZBH' VE IND.index_name = 'PK_T_GG_XXGL_TZGG'Aslında, optimize edicinin istatistiksel kapsamı hala sistemin istatistiksel bilgilerine sahiptir, ancak odak yukarıdaki üçü üzerindedir.Ayrıca zaman ayırıp ayırmadığınızı da test edebilirsiniz.
DBA hakkında daha fazlasını daha sonra paylaşacağım, ilgilenen arkadaşlar buna dikkat edebilir!