Oracleアーキテクチャの知識ポイントの運用
5006 ワード
アーキテクチャに関する最適化の問題:データベースはとても大きくて、アクセス量はとても高くて、共有プールはとても小さいです:このように共有プールの中で多くの解析したsql文を格納することができなくて、多くの硬い解析を招いて、このようにデータベースはとても遅いです.この時は共有プールを増やします.自動管理であればSGAの大きさを大きくします. :ある普段あまりアクセスしないデータベースのホストは4 Gメモリしかなくて、3 GのSGAを開拓して、500 mのPGA、OSオペレーティングシステムのメモリが不足するため、ホストの運行が遅くて、私達はSGAの大きさを減らします. データキャッシュ領域が小さすぎるために大量の物理読みが発生した場合、SGAを大きくする. 並べ替えに一時的な表領域が使用されると、PGAが小さすぎることを示し、システムに余分なメモリがある場合は、PGA(一般的にOLAPシステム) に多くの部分を割り当てることを考慮することができる.データベースに大量の更新操作がある場合、大量のログが発生してログ切替が頻繁になり、ログ切替の過程でデータベースが停滞し、性能を高めるためにログファイルのサイズを大きくする必要がある. アプリケーションがORA-01555エラーを常に検出しているため、次のモジュールに値を与えることができない場合、生産に障害が発生します.なぜこのsqlがこんなに遅く実行されているのかを確認する必要があります.最適化方法:インデックスを追加し、履歴データを整理し、テーブルのレコードを小さくしたり、undo_を大きくしたりします.retentionの値(この値は推奨値であり、強制ではない)は、undoテーブルスペースを大きくすることもできます.
具体的なsql最適化:構造環境+最適化されていない(単車速度:40+秒
バインド変数、オートバイ速度:8+秒
静的書き換え、自動車速度:6+秒
ロット提出、列車速度:2秒
集合書き方、飛行機速度:.14秒
直接経路、ロケット速度:.89秒、10万で.23なので量が必要で速く見えます.
並列に設置され、宇宙船の速度:どれだけのcpuが必要か:本機の実測1.05秒は6より性能が悪く、一般的に機械が空いていて性能が強い場合に使用される.
具体的なsql最適化:
sqlplus drop table t purge; create table t (x int); alter system flush shared_pool; set timing on
create or replace procedure proc1 as begin for i in 1..100000
loop execute immediate ‘insert into t values(‘||i||’)’; commit; end loop; end; /
exec proc1;
col sql_text format a30
set pagesize 1000
select t.sql_text,t.sql_id,t.parse_calls,t.executions from v$sql t where sql_text like '%insert into t values%' and rownum<100;
##resetpool.sql:
drop table t purge;
create table t(x int);
alter system flush shared_pool;
set pagesize 1000
col sql_text format a30
create or replace procedure proc2
as
begin
for i in 1..100000
loop
execute immediate
'insert into t values( :x )' using i;
commit;
end loop;
end;
/
select t.sql_text,t.sql_id,t.parse_calls,t.executions from v$sql t where sql_text like '%insert into t values%';
create or replace procedure proc3
as
begin
for i in 1..100000
loop
insert into t values( i );
commit;
end loop;
end;
/
create or replace procedure proc4
as
begin
for i in 1..100000
loop
insert into t values( i );
end loop;
commit;
end;
/
insert into t select rownum from dual connect by level <=100000;
create table t as select rownum x from dual connect by level <= 1000000;
create table t nologging parallel 4 as select rownum x from dual connect by level <=1000000;