ORACLE學習筆記(四) 資料庫優化

2021-08-19 15:15:11 字數 3382 閱讀 2626

繫結變數包擴下面兩個部分:

1) 輸入集合(collections),使用forall語句,一般用來改善dml(insert、update和delete) 操作的效能;

2) 輸出集合(collections),使用bulk collect子句;一般用來提高查詢(select)的效能。

create or replace procedure select_bulk_test as

type curtime is table of strainformation.curtime%type;

type position is table of strainformation.position%type;

type strain is table of strainformation.strain%type;

ctime curtime; -- no need to initialize

pos position;

str strain;

begin

select curtime,position,strain bulk collect into ctime,pos,str from strainformation;

for i in 1..pos.count loop

dbms_output.put_line(enums(i) || ' ' ||names(i));

end loop;

end;

/

delete  /*+ rule */  from  test_table;

顧名思義,插入資料時使用批量繫結,就是要通過儲存過程,自定義陣列的方式,一次繫結乙個完整的集合。如:

create or replace procedure insert_test as

type curtime istable of strainformation.curtime%type indexby binary_integer;

type position istable of strainformation.position%type index by binary_integer;

type strain istable of strainformation.strain%type indexby binary_integer;

i integer;

pos position;

str strain;

ctime curtime;

-- 該過程為通過使用批量繫結實現的資料插入,插入速度相當快

begin

--首先使用批量繫結查詢,把資訊表中的資料繫結到設定的陣列變數中

select curtime,position,strain bulk collect into ctime,pos,str from strainformation;

forall i in 1..pos.count -- use forall statement

commit;

exception

when others then

--出現錯誤,提示失敗

dbms_output.put_line('資料插入失敗!');

rollback;

end insert_test;

(1)buffercache大小的查詢和修改

buffercache的設定和sharedpool的設定很相似,一種情況我們單獨的去設定,如buffercache設定1個g或2個g,另外可以把buffercache的設定放在sga target裡面去,oracle自動去設定buffercache大小,在實際的生產中我們還是經常的去手工設buffercache大小,下面這句是查一下當前我們sga裡面的各個元件到底是多大。

select component,current_size,min_size from v$sga_dynamic_components;

buffer設定大小

alter system set db_cache_size=20m scope=memory;(也可以scope=both,設定buffercache,大小這裡設的是20m)

一般的有乙個原則:db_cache_size = sga_max_size/2~ sga_max_size*2/3,dbcache設的大小一般是sga_max_size的二分之一到三分之二,也就是整個的sga的一半到三分之二的空間。

(2)檢視sga狀態

select component,current_size,min_size from v$sga_dynamic_components; 

其中defaultbuffer cache  是buffercache的大小

(3)仔細查一下設定的值:  show parameter sga;

(4)show parameter db_cache_size;

如果db_cache_size的設定的值為預設值0,說明沒有設定大小,用的全是由sga自動調整

如何改呢,如下:altersystem set db_cache_size=200m scope=both;

(5)檢視spfile檔案的位置:show parameter spfile;

(6)當前資料庫設定的塊的大小:show parameter db_block_size

1)alter table test_table_info modify (position_clob clob store as securefile(cache));

//強制將所有lob 建立為securefilelob

alter system set db_securefile = 'force';

2)alter table test_table_info add (

position_clob clob lob(position_clob) store as securefile(cache);

strain_clob clob lob(strain_clob) store as securefile(cache));

3)使用db_securefile 初始化引數,資料庫管理員(dba) 可確定securefiles 的使用情況,其中有效值為:

(1)  always:嘗試將assm表空間上的所有lob 建立為securefile lob,但是僅可將自動段空間管理(assm) 表空間外的任何lob 建立為basicfile lob;

(2)  force:強制將所有lob 建立為securefilelob;

(3)  permitted:允許建立securefiles(預設值);

(4)  never:禁止建立securefiles;

(5)  ignore:禁止建立securefiles,並忽略使用securefiles 選項強制建立basicfiles 而導致的任何錯誤

oracle資料庫調優筆記

select tablespace name,file id,bytes 1024 1024,file name from dba data files order byfile id selectgroup member from v logfile select from v logfile s...

Oracle 資料庫調優

通常我們在安裝完oracle資料庫以後本地就直接使用了,但是用在正式的生產環境上還是需要一點優化的,否則就會是預設的最低配機器配置。難以發揮伺服器的效能。這裡記錄一下比較常用的幾個引數 進入檔案 etc sysctl.conf kernel.shmmax 24051816858 記憶體的70 ker...

資料庫調優學習

create table qquser qqid bigint primary key,password varchar 20 not null,lastlogtime datetime not null,online int not null,level int not null insert i...