TOPへ ID:050057
| Oracle FAQ集 |
| +オブジェクト ・HWM(High Water mark、高水位標)とは? ・パーティションとは? +監視 ・ログファイルの監視 +トランザクション ・データベースにおけるロック制御の必要性 +パフォーマンス ・パフォーマンス遅延時の初動調査方法 |
| 分類 | FAQ |
| オブジェクト | HWM(High Water mark、高水位標)とは? |
| 説明 | |
| Oracleは、セグメントヘッダーにHWM(High Water
Mark:高水位標)と呼ばれる「過去に表のブロックをどこまで使用したかを示すポインタ」を持つ。データの有無に関わらず、全表操作時にはHWMまでのすべてのブロックを読み込む。例えば、年度末処理などでデータ量が一時的に大きく増加し、その後少ないデータ量に戻る表を考える。このような表は、データが削除され件数が少なくなった後も、全表操作時にはHWMまでのすべてのブロックが読み込まれてしまい、処理が遅くなる。HWMは、表の再作成、もしくはTRUNCATE処理を行わない限り、再設定されない。 |
|
| 分類 | FAQ |
| オブジェクト | パーティションとは? |
| 説明 | |
| パーティションとは、管理しやすくするために大規模な表や索引を分割(=パーティション化)したものである。パーティションの種類を以下に挙げる。 ・レンジパーティション:指定した範囲に従ってパーティション化する ・ハッシュパーティション:ハッシュ関数に従ってパーティション化する ・コンポジットパーティション:データを範囲別にパーティション化し、さらにハッシュ関数でサブパーティションに分割する ・リストパーティション:指定したデータに従ってパーティション化する。 |
|
| 分類 | FAQ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 監視 | ログファイルの監視 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 説明 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| データベースのログファイルには、様々な情報が書き込まれる。例えば、「データベースが起動された」といったメッセージ的なものや、致命的な内部エラーなどが出力される。そのため、定期的にログファイルを監視することで、データベースの障害をすばやく検知し、適切に対処できるようになる。 ●監視すべきログファイルと監視キーワード
データベースに関連するエラーメッセージ数は非常に多く、その内容は多岐にわたる。その中でも、データベースの正常稼動を妨げるようなエラーメッセージや発生頻度の高いエラーメッセージは、DBAにおいてできる限り覚えておくべきである。 ●発生頻度の高いエラーメッセージ
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 分類 | FAQ |
| トランザクション | データベースにおけるロック制御の必要性 |
| 説明 | |
| 参考)ACIDプロパティー 1.ロックとは? 複数のユーザが異なるトランザクションを実行するとき、同時にデータベースに変更を加えたり、ほかのユーザによるコミットされていないトランザクションによって矛盾の生じたデータを取得したりすることを防ぐ必要がある。データやトランザクションを整合性の保たれた状態に維持するためには、ロック制御を使用する。ロック制御によって競合するトランザクションの排他を行い、各トランザクションを分離することで、同時実行を可能にする。ロックは、データベースソフトにより管理され、ユーザがデータベースにアクセスするごとに割り当てられる。 2.ロック制御の必要性 複数のユーザが同時にデータベースにアクセスし、トランザクションを実行するときには、データベースの整合性を妨げるさまざまな問題が生じるおそれがある。ロック制御の必要性は、以下4つの問題に起因する。 A.更新データの紛失 データベースに対して更新が同時に行われて更新処理が衝突し、正しい更新データが取得できないことをいう。こういった場合は、あるトランザクションによってデータベースに対して更新処理がおこなわれている間、ほかのトランザクションによる更新処理を行えないようにすることで防ぐことができる。 B.ダーティーリード あるトランザクションによってデータの更新が行われているときに、ほかのトランザクションではそのデータを検索で取得する。しかし更新のトランザクションがコミットされないで終了すると、データベースはロールバックされ、更新のトランザクション開始前の状態になり、検索で取得されたデータは、データベースには存在しないデータとなる。このようにコミットされていないトランザクションによって、取得データに矛盾が生じることをダーティーリードという。これは、1つのトランザクションによって更新中のデータに対して、検索を行えないようにすることで防ぐことができる。 C.反復不能読み取り あるトランザクションにより同一のデータへの読み取りを複数回おこなっているとき、別のトランザクションによってデータが更新されコミットされると、反復して同一データを取得したとき、初回と同じデータを取得できないことになり、データの一貫性が失われる。このような矛盾を反復不能読み取りという、これは、1つのトランザクションによって読み取りが行われているデータに対して、更新処理を行えないようにすることで防ぐことができる。 D.ファントム読み取り あるトランザクションが読み取りをおこなってテーブルから一連のレコードを取得している最中に、別のトランザクションによってレコードの挿入や削除がおこなわれると、最初のトランザクションの開始時には存在しなかったレコードが出現したり、存在していたレコードが不明になったりする。こういった矛盾をファントム読み取りという、これは、1つのトランザクションによってテーブルの読み取りがおこなわれているテーブルに対しては、挿入や削除が行えないようにすることで防ぐことができる。 |
|
| 分類 | FAQ |
| パフォーマンス | パフォーマンス遅延時の初動調査方法 |
| 説明 | |
| (1)event10046トレース パフォーマンス劣化が発生するSQL文が特定できている場合、event 10046トレースの取得を検討する。 該当トレースを取得することにより、Oracle内部でどのような待機要素が発生しているかを確認できる。 取得方法: connect ***/*** alter session set events '10046 trace name context forever ,level 12'; <遅延発生SQL文> alter session set events '10046 trace name context off'; ※実行ユーザーに alter session システム権限が必要。 上記を実行するとuser_dump_dest にトレースファイルが出力される。 (2)statspackレポート 遅延発生SQL文が特定できない場合や、特定のSQL文に依存しないで遅延事象が発生する場合は、statspackレポートを御取得することが問題解析に有効となる。 以下の手順で取得する。 statspackの作成: @$ORACLE_HOME/rdbms/admin/spcreate.sql ※実施はSYSで行う。 statspackレポートの取得: ※以下の実行ユーザはperfstatになる。 SQL> execute statspack.snap ※こちらは、<遅延発生SQL文> 実行前および実行後(もしくは実行中)の2つのポイントを取得する。 SQL> @$ORACLE_HOME/rdbms/admin/spreport.sql ※こちらでレポートが取得できる。 |
|
| 分類 | FAQ |
| 説明 | |
UNIX,Linux