真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

oracle怎么設置指標,oracle參數(shù)設置

oracle中索引選擇性有沒有規(guī)范的度量指標

oracle中最常用的索引就兩種:B樹索引和位圖索引,這里就來簡單說下這兩種索引的使用。

成都做網(wǎng)站、網(wǎng)站制作的關注點不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒有做好網(wǎng)站,給成都創(chuàng)新互聯(lián)一個展示的機會來證明自己,這并不會花費您太多時間,或許會給您帶來新的靈感和驚喜。面向用戶友好,注重用戶體驗,一切以用戶為中心。

B-樹索引在Oracle中是一個通用的索引,在創(chuàng)建索引時它就是默認的索引類型。最多可以包括32列。

位圖索引Oracle為每個唯一鍵創(chuàng)建一個位圖,然后把與鍵值所關聯(lián)的ROWID保存為位圖。最多可以包括30列。

一般情況下,大多數(shù)用戶都只創(chuàng)建TYPE為NORMAL的B-樹索引,所以對于較低基數(shù)的列我們都是不創(chuàng)建索引的,因為B-樹索引對查詢速度提升不一定會有改善,甚至會增加Insert、Update、Delete命令所消耗的時間。

位圖索引在加載表(插入操作)時通常要比B-樹索引做得好。通常,位圖索引要比一個低基數(shù)(很少不同值)上的B-樹索引要快3~4倍,但如果新增的值占插入行的70%以上時,B-樹索引通常會更快一些。當每條記錄都增加一個新值時,B-樹索引要比位圖索引快3倍。

建議不要在一些聯(lián)機事務處理(OLTP)應用程序中使用位圖索引。B-樹索引的索引值中包含ROWID,這樣Oracle就可以在行級別上鎖定索引。位圖索引被存儲為壓縮的索引值,其中包含了一個范圍內(nèi)的ROWID,因此ORACLE必須針對一個給定值鎖定所有范圍內(nèi)的ROWID。這種鎖定可能自阿某些DML語句中造成死鎖。SELECT語句不會受到這種鎖定問題的影響。

位圖索引有很多限制:

1、 基于規(guī)則的優(yōu)化器不會考慮位圖索引

2、 當執(zhí)行ATLER TABLE語句,并修改包含有位圖索引的列時,會使位圖索引實效

3、 位圖索引在索引塊中儲存了索引鍵的值;然而,他們并不能用戶任何類型的完整性檢查

4、 位圖索引不能被申明為唯一索引

以上是援引的一些簡單概念,下面是我實際工作中總結出來的:

我要做一個查詢,涉及兩個表t_sym_dict,t_sym_operlog,表結構分別如下:

oracle的索引使用oracle的索引使用

其中t_sym_operlog的索引如下:

oracle的索引使用

上面基數(shù)比較小的三列創(chuàng)建了位圖索引

t_sym_dict的索引如下:

oracle的索引使用

查詢語句如下:

select (select c.dict_name

from t_sym_dict c

where c.dict_typeid = 'SYM_CITYINFO'

and c.dict_id = t.memo) 分公司,

t.staff_id 工號

from t_sym_operlog t

where t.operlog_subtype = '103'

and t.obj_type = 'CUSTLINKINFO'

and t.memo = '200'

-- and t.extsys_code = ''

-- and t.staff_id = ''

and t.oper_date = to_date('20110501000000', 'yyyymmddhh24miss')

and t.oper_date = to_date('20110530000000', 'yyyymmddhh24miss')

-- order by t.memo, t.oper_date

然后就出現(xiàn)了如下奇怪的現(xiàn)象(索引的創(chuàng)建沒有問題)

1、索引使用正常

oracle的索引使用

2、下面的看不到oper_date索引的使用

oracle的索引使用

3、下面的看不到t_sym_operlog表的索引使用

oracle的索引使用

嘗試的解決的辦法:

對數(shù)據(jù)表做采集,就是analysis

BEGIN

DBMS_STATS.gather_table_stats(ownname = 'CSID',tabname = 't_sym_operlog_back');

end;

猜測的導致原因:

當你運用SQL語言,向數(shù)據(jù)庫發(fā)布一條查詢語句時,ORACLE將伴隨產(chǎn)生一個“執(zhí)行計劃”,也就是該語句將通過何種數(shù)據(jù)搜索方案執(zhí)行,是通過全表掃描、還是通過索引搜尋等其它方式。搜索方案的選用與ORACLE的優(yōu)化器息息相關。

SQL語句的執(zhí)行步驟

一條SQL語句的處理過程要經(jīng)過以下幾個步驟。

1 語法分析 分析語句的語法是否符合規(guī)范,衡量語句中各表達式的意義。

2 語義分析 檢查語句中涉及的所有數(shù)據(jù)庫對象是否存在,且用戶有相應的權限。

3 視圖轉換 將涉及視圖的查詢語句轉換為相應的對基表查詢語句。

4 表達式轉換 將復雜的SQL表達式轉換為較簡單的等效連接表達式。

5 選擇優(yōu)化器 不同的優(yōu)化器一般產(chǎn)生不同的“執(zhí)行計劃”

6 選擇連接方式 ORACLE有三種連接方式,對多表連接ORACLE可選擇適當?shù)倪B接方式。

7 選擇連接順序 對多表連接ORACLE選擇哪一對表先連接,選擇這兩表中哪個表做為源數(shù)據(jù)表。

8 選擇數(shù)據(jù)的搜索路徑 根據(jù)以上條件選擇合適的數(shù)據(jù)搜索路徑,如是選用全表搜索還是利用索引或是其他的方式。

9 運行“執(zhí)行計劃”

分析:

oracle優(yōu)化器CBO存在的典型問題:

有時,表明明建有索引,但查詢過程顯然沒有用到相關的索引,導致查詢過程耗時漫長,占用資源巨大,問題到底出在哪兒呢?按照以下順序查找,基本上能發(fā)現(xiàn)原因所在。

查找原因的步驟

首先,我們要確定數(shù)據(jù)庫運行在何種優(yōu)化模式下,相應的參數(shù)是:optimizer_mode??稍趕vrmgrl中運行“show parameter optimizer_mode"來查看。ORACLE V7以來缺省的設置應是"choose",即如果對已分析的表查詢的話選擇CBO,否則選擇RBO。如果該參數(shù)設為“rule”,則不論表是否分析過,一概選用RBO,除非在語句中用hint強制。

其次,檢查被索引的列或組合索引的首列是否出現(xiàn)在PL/SQL語句的WHERE子句中,這是“執(zhí)行計劃”能用到相關索引的必要條件。

第三,看采用了哪種類型的連接方式。ORACLE的共有Sort Merge Join(SMJ)、Hash Join(HJ)和Nested Loop Join(NL)。在兩張表連接,且內(nèi)表的目標列上建有索引時,只有Nested Loop才能有效地利用到該索引。SMJ即使相關列上建有索引,最多只能因索引的存在,避免數(shù)據(jù)排序過程。HJ由于須做HASH運算,索引的存在對數(shù)據(jù)查詢速度幾乎沒有影響。

第四,看連接順序是否允許使用相關索引。假設表emp的deptno列上有索引,表dept的列deptno上無索引,WHERE語句有emp.deptno=dept.deptno條件。在做NL連接時,emp做為外表,先被訪問,由于連接機制原因,外表的數(shù)據(jù)訪問方式是全表掃描,emp.deptno上的索引顯然是用不上,最多在其上做索引全掃描或索引快速全掃描。

第五,是否用到系統(tǒng)數(shù)據(jù)字典表或視圖。由于系統(tǒng)數(shù)據(jù)字典表都未被分析過,可能導致極差的“執(zhí)行計劃”。但是不要擅自對數(shù)據(jù)字典表做分析,否則可能導致死鎖,或系統(tǒng)性能下降。

第六,索引列是否函數(shù)的參數(shù)。如是,索引在查詢時用不上。

第七,是否存在潛在的數(shù)據(jù)類型轉換。如將字符型數(shù)據(jù)與數(shù)值型數(shù)據(jù)比較,ORACLE會自動將字符型用to_number()函數(shù)進行轉換,從而導致第六種現(xiàn)象的發(fā)生。

第八,是否為表和相關的索引搜集足夠的統(tǒng)計數(shù)據(jù)。對數(shù)據(jù)經(jīng)常有增、刪、改的表最好定期對表和索引進行分析,可用SQL語句“analyze table xxxx compute statistics for all indexes;"。ORACLE掌握了充分反映實際的統(tǒng)計數(shù)據(jù),才有可能做出正確的選擇。

第九,索引列的選擇性不高。

我們假設典型情況,有表emp,共有一百萬行數(shù)據(jù),但其中的emp.deptno列,數(shù)據(jù)只有4種不同的值,如10、20、30、40。雖然emp數(shù)據(jù)行有很多,ORACLE缺省認定表中列的值是在所有數(shù)據(jù)行均勻分布的,也就是說每種deptno值各有25萬數(shù)據(jù)行與之對應。假設SQL搜索條件DEPTNO=10,利用deptno列上的索引進行數(shù)據(jù)搜索效率,往往不比全表掃描的高,ORACLE理所當然對索引“視而不見”,認為該索引的選擇性不高。

但我們考慮另一種情況,如果一百萬數(shù)據(jù)行實際不是在4種deptno值間平均分配,其中有99萬行對應著值10,5000行對應值20,3000行對應值30,2000行對應值40。在這種數(shù)據(jù)分布圖案中對除值為10外的其它deptno值搜索時,毫無疑問,如果索引能被應用,那么效率會高出很多。我們可以采用對該索引列進行單獨分析,或用analyze語句對該列建立直方圖,對該列搜集足夠的統(tǒng)計數(shù)據(jù),使ORACLE在搜索選擇性較高的值能用上索引。

第十,索引列值是否可為空(NULL)。如果索引列值可以是空值,在SQL語句中那些需要返回NULL值的操作,將不會用到索引,如COUNT(*),而是用全表掃描。這是因為索引中存儲值不能為全空。

第十一,看是否有用到并行查詢(PQO)。并行查詢將不會用到索引。

第十二,看PL/SQL語句中是否有用到bind變量。由于數(shù)據(jù)庫不知道bind變量具體是什么值,在做非相等連接時,如“”,“”,“l(fā)ike”等。ORACLE將引用缺省值,在某些情況下會對執(zhí)行計劃造成影響。

如果從以上幾個方面都查不出原因的話,我們只好用采用在語句中加hint的方式強制ORACLE使用最優(yōu)的“執(zhí)行計劃”。

hint采用注釋的方式,有行注釋和段注釋兩種方式。

如我們想要用到A表的IND_COL1索引的話,可采用以下方式:

“SELECT * FROM A WHERE COL1 = XXX;"

注意,注釋符必須跟在SELECT之后,且注釋中的“+”要緊跟著注釋起始符“/*”或“--”,否則hint就被認為是一般注釋,對PL/SQL語句的執(zhí)行不產(chǎn)生任何影響。

兩種有效的跟蹤調(diào)試方法

ORACLE提供了兩種有效的工具來跟蹤調(diào)試PL/SQL語句的執(zhí)行計劃。

一種是EXPLAIN TABLE方式。用戶必須首先在自己的模式(SCHEMA)下,建立PLAN_TABLE表,執(zhí)行計劃的每一步驟都將記錄在該表中,建表SQL腳本為在${ORACLE_HOME}/rdbms/admin/下的utlxplan.sql。

打開SQL*PLUS,輸入“SET AUTOTRACE ON”,然后運行待調(diào)試的SQL語句。在給出查詢結果后,ORACLE將顯示相應的“執(zhí)行計劃”,包括優(yōu)化器類型、執(zhí)行代價、連接方式、連接順序、數(shù)據(jù)搜索路徑以及相應的連續(xù)讀、物理讀等資源代價。

如果我們不能確定需要跟蹤的具體SQL語句,比如某個應用使用一段時間后,響應速度忽然變慢。我們這時可以利用ORACLE提供的另一個有力工具TKPROF,對應用的執(zhí)行過程全程跟蹤。

我們要先在系統(tǒng)視圖V$SESSION中,可根據(jù)USERID或MACHINE,查出相應的SID和SERIAL#。

以SYS或其他有執(zhí)行DBMS_SYSTEM程序包的用戶連接數(shù)據(jù)庫,執(zhí)行“EXECUTE DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(SID,SERIAL#,TRUE);”。

然后運行應用程序,這時在服務器端,數(shù)據(jù)庫參數(shù)“USER_DUMP_DEST”指示的目錄下,會生成ora__xxxx.trc文件,其中xxxx為被跟蹤應用的操作系統(tǒng)進程號。

應用程序執(zhí)行完成后,用命令tkprof對該文件進行分析。命令示例:“tkprof tracefile outputfile explain=userid/password"。在操作系統(tǒng)ORACLE用戶下,鍵入“tkprof”,會有詳細的命令幫助。分析后的輸出文件outputfile中,有每一條PL/SQL語句的“執(zhí)行計劃”、CPU占用、物理讀次數(shù)、邏輯讀次數(shù)、執(zhí)行時長等重要信息。根據(jù)輸出文件的信息,我們可以很快發(fā)現(xiàn)應用中哪條PL/SQL語句是問題的癥結所在。

oracle中的度量閾值怎樣設置

在Oracle10G中引入了metric,用來監(jiān)控數(shù)據(jù)庫表空間,如下實例:

1、確認現(xiàn)有的metric

SQL conn / as sysdba

已連接。

SQL select count(1) from dba_thresholds;

COUNT(1)

----------

22

2、創(chuàng)建表空間

SQL select metric_id,metric_name from v$metricname where metric_name like'%space%'

2 ;

METRIC_ID METRIC_NAME

---------- ----------------------------------------------------------------

9001 Tablespace Bytes Space Usage

9000 Tablespace Space Usage

SQL create tablespace tbs_lw datafile '/opt/oracle/oradata/charge/tbs_lw01.dbf' size 10m;

表空間已創(chuàng)建。

3、創(chuàng)建新的metric

SQL BEGIN dbms_server_alert.set_threshold (dbms_server_alert.tablespace_pct_full,NULL, NULL, NULL, NULL, 1, 1, NULL, dbms_server_alert.object_type_tablespace, 'TBS_LW');END;

2 /

PL/SQL 過程已成功完成。

4、查看新創(chuàng)建的metric

SQL select count(1) from dba_thresholds;

COUNT(1)

----------

23

SQL SELECT warning_value, critical_value, status FROM dba_thresholds WHERE metrics_name = 'Tablespace Space Usage' AND object_name = 'TBS_LW';

WARNING_VALUE CRITICAL_VALUE STATUS

-------------------- -------------------- -------

80 95 VALID

5、模擬一個表數(shù)據(jù)增長達到threshold

SQL create table t1 tablespace tbs_lw as select * from user_objects;

表已創(chuàng)建。

SQL select count(*) from t1;

COUNT(*)

----------

30060

SQL insert into t1 select * from t1 where rownum4001;

已創(chuàng)建4000行。

SQL insert into t1 select * from t1 where rownum4001;

已創(chuàng)建4000行。

SQL commit;

提交完成。

6、查看是否生效

SQL SELECT reason, message_level,DECODE(message_level, 5, 'WARNING', 1, 'CRITICAL') ALERT_LEVEL FROM dba_outstanding_alerts WHERE object_name = 'TBS_LW';

REASON MESSAGE_LEVEL ALERT_LE

-------------------------------------------------- ------------- --------

表空間 [TBS_LW] 已占用 [90 Percent] 5 WARNING

7、停用metric

SQL BEGIN dbms_server_alert.set_threshold (dbms_server_alert.tablespace_pct_full,dbms_server_alert.operator_do_not_check, '0',dbms_server_alert.operator_do_not_check, '0', 1, 1, NULL,dbms_server_alert.object_type_tablespace, 'TBS_LW');END;

2 /

PL/SQL 過程已成功完成。

SQL SELECT warning_value, critical_value, status FROM dba_thresholds WHERE metrics_name = 'Tablespace Space Usage' AND object_name = 'TBS_LW';

WARNING_VALUE CRITICAL_VALUE STATUS

-------------------- -------------------- -------

0 0 VALID

8、取消metric

BEGIN dbms_server_alert.set_threshold (dbms_server_alert.tablespace_pct_full,NULL, NULL, NULL, NULL, 1, 1, NULL, dbms_server_alert.object_type_tablespace, 'TBS_LW');END;

2 /

PL/SQL 過程已成功完成。

SQL SELECT warning_value, critical_value, status FROM dba_thresholds WHERE metrics_name = 'Tablespace Space Usage' AND object_name = 'TBS_LW';

如何設置Oracle的環(huán)境變量

按如下方法設置:

以window10和oracle10g為例。

1、右鍵“此電腦”,選擇上方的“屬性”。

2、選擇左側列表中的“高級系統(tǒng)設置”。

3、選擇上方的“高級”標簽,然后選擇“環(huán)境變量”。

4、系統(tǒng)變量下,選擇“Path”,然后點擊“編輯”按鈕。

5、在“變量值”處添加oracle的bin路徑,并以英文分號結尾,然后逐層點擊“確定”按鈕即可。

oracle 怎么設置

unix export ORACLE_HOME=/u01/oracle/10.2.0/db_1 windows set ORACLE_HOME=d:\oracle\10.2.0\db_1 =后面可以自定義,unix下指定的目錄必須存在并且擁有讀寫權限


分享名稱:oracle怎么設置指標,oracle參數(shù)設置
文章起源:http://weahome.cn/article/dssosgj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部