ORACLE学習ノート(四)——データベース最適化


一、ORACLEデータベースのデータ操作の最適化(一括バインドBulk Binding)
バインド変数パッケージは、次の2つのセクションに拡張されます.
1)FORALL文を使用して、DML(INSERT、UPDATE、DELETE)操作の性能を改善するために一般的に使用されるコレクション(collections)を入力する.
2)出力集合(collections)は,BULK COLLECT句を用い,一般にクエリ(SELECT)の性能向上に用いられる.
(1)データ照会の最適化(BULK COLLECT)
    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;
  /

(2)最適化の削除
          DELETE  /*+ RULE */ from  Test_Table;
(3)最適化入力セットの挿入(FORALL)
名前の通り、データを挿入するときに一括バインドを使用するのは、ストレージ・プロシージャを介して配列をカスタマイズする方法で、完全な集合を一度にバインドすることです.次のようになります.
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
      insert /*+ append */ into STRAININFO_ALERT(ctime(i),pos(i),s(i),str(i));
  commit;
  exception
      when others then
      --    ,    
      dbms_output.put_line('      !');
  rollback;
END insert_test;

 
 
二、ORACLE性能最適化
 1、buffer_Cacheサイズの設定と根拠
(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を設定することもできますが、サイズはここで20 Mとします)
一般的には、DB_という原則があります.CACHE_SIZE = SGA_MAX_SIZE/2~ SGA_MAX_SIZE*2/3、dbcache設定の大きさは一般的にSGA_MAX_SIZEの2分の1から3分の2、つまり全体のSGAの半分から3分の2の空間です.
(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
 
 
2、CLOB性能調整
      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を強制的に作成した場合のエラーを無視
 
 
注:内容は完全オリジナルではなく、私個人が勉強している間に整理して練習したものです.