OracleのPROCパフォーマンスの最適化体験プログラム

 

PROC APは、Oracleが提供するデータベース操作の一種です。使用に非常に直感的で不便な、通常のCに変換することができます必要なプリコンパイルされたコードの後に​​、また読みにくいがあり、ESQL技術に基づいています。

プログラマーの開発につながったこれらの問題のいくつかの通常のProc運転効率の低い存在に表示されますので、この記事では、私はあなたの参照を与えることを願って、いくつかのPROCいくつかのコンパイラでの経験を説明しています。

 

以下は簡単な例を必要とします:

DB1は、同じDB2を見るためにデータ・テーブル・tbl_hch_test内のデータをエクスポートするために必要な。

最速の方法は、使用のOracleデータにあるエクスポートしてインポート圧縮ツールポンプが、あるexpdp / impdpは、我々はPROCプログラミングを使用する必要があるので、データベース環境のための特別な要件があるDB1を開始し、データを削除してのDB2の内部を挿入します。

 

シンプルな実装:

FETCHのサイクルからのデータアウトカーソル、DB1を開き、EXEC SQL挿入を使用して、命令実行データベースをコミットするためにはsprintf、DB2を使用して、INSERT文に組み立て。

 

最適化:

上記のアプローチは、要件を完了することがありますが、スペース効率が最適化されていませんが。ターンでは、以下に説明:

1バインド変数の代わりにsprintfの組み立てられたSQLを使用して

       練習は需要が高いシナリオでsprintf関数の効率を簡単に回避バインド変数のsprintfコールを使用して、パフォーマンスのボトルネックになることを証明しています。

       データベース内のSQLの実行が同じであるため、また、する必要はありません大幅にデータベースの負荷と増加効率を減らすことができ、すべてのSQL実行計画を再分析します。

 

プリコンパイル文の挿入、二対、一度コンパイルを複数回、隠されたカーソルの使用を避けるには、毎回再コンパイルします。

       同上。、プリコンパイラは、CPUの動作のより消費です。SQL同じ場合は、カーソルがパフォーマンス費の削減、再利用することができます。

3それぞれが挿入されたデータの数を取得し、バインド配列を使用して、バッチ処理を使用して。

       バッチ操作は、操作データをスピードアップするために、クライアントとサーバ間の相互作用の数を減らすことができます。

トランザクションを高めるために4適切な間隔のコミット(複数の行がコミット時のINSERT)

       あなたは間隔が待機消費量を減らすことができ、トランザクションコミットを向上させる、Oracleデータベースのトランザクションを返す前に完了するために、ディスク操作のためのディスクと待機に提出したときにメモリからログをバック磨く必要があります。

 

前と比較した後、テストの効率を最適化:

 

同様の操作を1.3Sから23Sに減少し

 

その他の効率化対策:

これらは、Oracleと組み合わせた最適化プログラム、いくつかの機能の一部であるが、さらに、スピードを向上させるいくつかの簡単な最適化のヒントをご紹介します:

ターゲットテーブルインデックス、データの挿入と、完全な復興を削除する1

閉じるログテーブル2、REDOログは、ALTER TABLEのtbl_hch_testのnologingを低減します。戻ってそれを変更するには、データをロードした後。

3挿入の速度を加速するために、直接、高水位より上のデータを挿入し、APPENDヒントを使用して。

4並列(パラレル)クエリ、またはクエリ最大速度(タブparttion(par_name)SELECT * FROM)パーティションのクエリを使用する使用。

5可能な場合は、ネットワークのオーバーヘッドの伝送を減らす、データベース・サーバ上でプログラムを実行してみてください

 

 

キーコードの参照:

 

 

 

 

 

 

 

 

 

 

さらに、通常はエラーを起こしやすいいくつかのPROCを使用して取り付けられています。

1データベースVARCHAR2の値が格納されたchar型のフィールドの配列を使用

       データベースの種類に対応するchar配列は、PROCチャーであり、種別に対応するVARCHAR構造がVARCHAR2です。データベースVARCHAR2 char型フィールドに格納された値のアレイを使用して、それが自動的に抽出されたCHAR型としてデータを起こす末尾にスペースを追加します。

       ソリューションには、EXEC SQL VAR / EXEC SQL TYPE同じ変数やデータ型を使用することができます。または、プリコンパイル時のCHAR_MAP =文字列永久労働戦いで指定

 

 

いくつかのコマンドは、プリコンパイルコマンドです2注procが、プリコンパイラの間だけ有効になり、そしてCマクロ言語は非常によく似ています。たとえば、次のコマンドを実行します。

EXEC SQL CONTEXTの使用

ESEC SQLたびSQLERRORドゥ

 

ここでは説明の一般的なエラーは次のとおりです。

 

完全主義のうちPROCを理解するために、提案されたマルチ差異解析コードの.cファイルがプリコンパイル豚肉と.PCファイルの後に発生しました。

 

3 PROCポインタ変数

PROCが正しくでき結腸前述の変数のように、通常の変数を使用して結合する方法として一般的な変数やポインタ、ポインタ変数を識別する。

公式文書は、これは言っていました:

 

 

 

いくつかのプログラマは、不要な消費を増やし、複数回のデータをコピーするPROC、使用のmemcpy内のポインタを使用する方法がわかりません。

 

 

 

C言語のマクロで4 PROC

Proc能识别C语言的一些简单的宏,但如果有复杂的宏(如不定参数宏),proc在预编译时会报错。

此时可以考虑使用gcc –E先对.pc文件进行预处理,之后再使用proc进行预编译。

 

 

 

如果对于proc编程还有什么其它疑惑的地方,欢迎大家与我讨论,或者查阅官方帮助文档。《Oracle Proc官方文档.pdf》

おすすめ

転載: www.cnblogs.com/kingstarer/p/11968247.html