津島博士のパフォーマンス講座 第78回 Oracle DatabaseのJSONについて, Maximum Security Zonesで、クラウドのセキュリティ対策の弱体化を防ぐ. 皆さんこんにちは、今年は10月から気温が低いので、日々の急激な寒暖差に身体がついていけませんね。今回は、Oracle... ※本記事は、Paul Toal (DISTINGUISHED SOLUTION ENGINEER もし列に対する統計情報がなければ「col1 > 10」の選択率はORACLEは予測できないため、インデックススキャンとテーブルフルスキャンどちらが早いかを判断することはできません (ダイナミックサンプリング機能はここでは考慮しません)。 Gold DBA のセミナー、Oracle Certified... 津島博士のパフォーマンス講座 Indexページ ▶▶ SQL>exec dbms_stats.purge_stats (to_timestamp('2019/05/30 23:59:59','YYYY/MM/DD HH24:MI:SS')); SQL> exec dbms_stats.purge_stats (DBMS_STATS.PURGE_ALL); システムエグゼの社員が執筆するコラムや読み物など、技術関連のお役立ちコンテンツです。, システムエグゼが出展する展示会情報や開催予定のセミナー・イベント情報はこちらからご確認いただけます。, 各種メディアへの掲載情報、システムエグゼからのお知らせや最新ニュースをご紹介します。, 第18回:現役DBAが解説 ~運用保守編~ Oracle Databaseのアーカイブログの運用について, 第17回:OracleDatabaseで異なる文字コード間におけるデータ移行時の注意点, 第16回:Oracle Cloud Database ServiceのDBに直接接続してみた(検証編), 第15回:Oracle Cloud Database ServiceのDBに直接接続してみた(説明編), 第14回:オンプレOracle DBからRDS for Oracle(AWS)への移行, 第8回:Oracleバックアップの速度改善(Oracle Recovery Manager 編), 第2回:PostgreSQL-カンマ区切りデータの変換(regexp_split_to_table). TRYスキーマ内の全てのオブジェクトの統計情報を収集し、各表のオプティマイザ統計情報が収集されたことを確認して下さい。, まずは、TRYスキーマ内の各表にオプティマイザ統計情報が存在するか否か、存在する場合にはその統計情報はいつ収集されたものなのかを確認しています。その結果、前回の演習で作成したTBL1表では7/18に収集した統計情報が存在していて、今回の演習1で作成したTBL2表とTBL3表では、統計情報が空の状態であることが確認できます。, 次に、TRYスキーマ内の全てのオブジェクトの統計情報を収集する為、DBMS_STATSパッケージのGATHER_SCHEMA_STATSプロシージャを実行します。引数のパラメータとしては、スキーマ名を指定する「OWNNAME」のみを設定しており、特にデータのサンプリング率を指定する「ESTIMATE_PERCENT」は設定していません。これにより、前回の記事でご紹介したOracle Database 11gの「DBMS_STATS.AUTO_SAMPLE_SIZE」が使用されることになり、統計情報の収集時間の高速化が行われますね。, 最後に、念のため各表のオプティマイザ統計情報が収集されたのかを確認してみると、全ての表で統計情報がセットされていますし、それらが直近で収集されたものであることが「LAST_ANALYZED」列から判断することができます。, ■ 3. 前回の投稿から間が空いてしまいましたが、今回はOracle Databaseの「実行計画」についてお話ししたいと思います。例のとおり、今回もわかりやすさ追求のため、詳細を省略しているところがある点ご了承願います。 しばちょう先生の試して納得!DBAへの道 indexページ みなさん、こんにちは。“しばちょう”こと柴田長(しばた つかさ)です。前回に引き続き今回もオプティマイザ統計収集の管理についてご紹介していき … TBL2表のみ統計情報が失効したと判断する閾値をデフォルトに戻して下さい。, デフォルト値を変更する方法を学んだだけでは不十分ですよね。それを戻す方法もきちんと身につけておくべきと言うことで、TBL2表のみ閾値をデフォルトの10%に戻してみます。スキーマ全体ではなく、1つの表のみを対象としたいので、DBMS_STATS.SET_TABLE_PREFSプロシージャを使用します。「RESET」的なプロシージャは無く、演習4でデフォルト値から別の値に変更した方法とほぼ同じように実行します。ただし、「デフォルト値に戻す」= 「pvalue => NULL」と言うことだけ覚えておいてください。, さて、Oracle Database 11gでのオプティマイザ統計情報の取得の効率化を体験して頂きましたが、いかがでしたでしょうか?, 以前と比較して自動統計収集でオプティマイザ統計収集を取得しているデータベースも増えてきている印象がありますが、まだまだ手動取得されているケースも多いかと思います。また、データ量も爆発的に増加しているという傾向もあるので、統計情報の収集に要する時間を少しでも短縮したいという要望は多いです。前回と今回の演習で体験して頂いた高速化と効率化。データベース管理者にとっては非常に強い武器となる機能なので、引き続き細かい部分の動作確認を行って頂きたいと思っています。, 次回は、「統計情報の保留」という機能について体験して頂きたいと考えています。こちらは高速化や効率化の観点ではなく、SQLの実行計画の安定化につながる機能となりますので、楽しみにしていて下さい。今回もありがとうございました。次回も頑張りますので、よろしくお願いします。. TRYスキーマに、第一カラムがNUMBER型、第二カラムがCHAR(100)型で、100レコードが格納されている表「TBL2」と表「TBL3」を作成して下さい。また、第一カラムに主キーを作成してください。, はい、これまで何度も同じような演習がありましたので、サクッと作成出来たかと思います。ちなみに、主キーを作成する手法はいくつか存在しますが、私は上記の手順で作成することをお勧めしています。今回は100レコードしかINSERTしませんので、どの手順でもほとんど実行時間の差を感じることはできませんが、数十GB以上にもなるレコード量を扱う場合には大きな差が出てくる傾向があります。詳細は今後の連載で制約を扱った際に説明させて頂きたいと思っていますので、今回は3つのポイントだけ挙げておきます。1つ目はINSERTと索引作成の順序。2つ目は索引作成と主キーの定義を分けること。3つ目は主キーとなるカラムの定義にNot Null制約を付けておくこと。これらの全ての理由を思いつかれた方は、本当に良く実機を触られている方だと思います。, ■ 2. oracleデータベースでユーザー(スキーマ)を作成・変更・削除する方法をお探しではありませんか? 本記事では、ユーザー(スキーマ)を作成・変更・削除する方法を紹介しています。sqlサンプルもあるのでぜひ参考にしてください。 Copyright© スタートアップIT企業社長のブログ , 2020 All Rights Reserved. エンジニアと社長業を7:3の割合でやってます。 all rights reserved. - CYBER SECURITY)による"Prevent a weak cloud security posture with Maximum Oracle の統計情報に影響するパラメーター ... バージョン対応のジオデータベースを使用する場合は、圧縮処理を定期的に実施して古い情報を削除し、ジオデータベースのコンテンツをメンテナンスする必要 … はじめに. ⇒データ肥大化のため削除に時間が掛かりすぎるため削除出来ない。 統計情報履歴を一括でPURGEする。 OracleのプロシージャにはPURGE_ALLも用意されており統計情報履歴を一括で削除する場合にはこれを利用することが出来る。(Oracle 11.2.0.3 以降で利用可能) Oracle 10g ではオプティマイザ統計情報の収集機能がかなり強化され便利になりました。 中でも一番便利になったのは、デフォルトで1日1回オプティマイザ統計情報の自動収集が行われるようジョブがスケジューリングされるようになったことです。 OracleDBの統計情報の取得・更新方法「DBMS_STATS.GATHER_XXXX_STATS」を紹介, 動的パフォーマンス・ビューが参照している動的パフォーマンス表などの固定オブジェクト, cpuspeednw(1秒当たりのCPU平均サイクル数)、ioseektim(I/Oのシーク時間)、iotfrspeed(1回のI/O要求での速度). ■ 1. Please try again. OracleDatabaseの「統計情報」とは何か?なぜ取得するのか?運用方法とは?について紹介します。OracleDatabaseを運用して上で最も重要な要素の1つです。 この記事でOracleDatabase初心者でも分かりやすく統計情報について紹介していますので、「統計情報」の概要をしっかりと学んでいきましょう。 みなさん、こんにちは。“しばちょう”こと柴田長(しばた つかさ)です。前回に引き続き今回もオプティマイザ統計収集の管理についてご紹介していきます。, 前回の演習ではオプティマイザ統計情報の収集時間を高速化するOracle Database 11gの新機能を体験して頂きましたが、今回は効率化という観点で、統計情報の収集時間を短縮削減する機能をご紹介したいと思います。統計情報が実際に格納されているデータの特徴にどれだけ近いかという精度がオプティマイザに最良な実行計画を選択させる為には不可欠ですが、統計情報をどのような頻度で取得する必要があるのでしょうか?極端な話をすれば、ある表のレコード数が1件増えただけで統計情報を再取得する必要性は感じませんよね。逆に、レコード数が2倍、3倍と大幅に増加した場合には、再取得した方が良さそうだという感覚は理解し易いかと思います。, では何%が閾値なのか。この一般的な解として、Oracle Database 11gでは表の既存レコード数の10%(= デフォルト値)が更新された場合、その表の統計情報が失効したと自動的に判断する仕組みを持っています。そして、この情報を基に失効したオブジェクトに限定した統計情報の再取得が可能である為、日々の統計情報収集に要する時間の短縮を実現します。, と、いくら言葉で紹介していても実際のオペレーションが分からなければ利用することができませんので、以下の演習をこれまでの演習で使用したOracle Database 11g Release 2 Enterprise Editionのデータベースで試してみてください。 Copyright© SystemEXE,Inc. TBL2表の11レコードを更新した後、統計情報が失効していることを確認して下さい。, TBL2表の11レコードを更新するのは問題ないと思いますが、上記の回答例の中で、SYSユーザーで接続してDBMS_STATS.FLUSH_DATABASE_MONITORING_INFOプロシージャを実行しています。これはマニュアルに説明があるように「メモリ内のすべての表の監視情報をディクショナリにフラッシュ」するプロシージャであり、Oracle Databaseは定期的に表の更新履歴をメモリからディクショナリにフラッシュしますが、それを待機せずに手動でフラッシュすることが可能です。今回は検証の都合上、表の更新直後にUSER_TAB_MODIFICATIONSディクショナリ・ビューを確認する為に実行していますので、通常は実行する必要が無いプロシージャです。, USER_TAB_MODIFICATIONSディクショナリ・ビューを参照することで、表毎の更新(INSERT/UPDATE/DELETE)されたレコード数等確認することが可能です。今回の演習ではTBL2表の11レコードをUPDATEしたので、その結果がそのまま出力されていることが確認できたかと思います。非常に便利なビューなので、私はパフォーマンス・チューニングの際に各表がアプリケーションからどのように更新されるのかを把握する一つの手段として、このビューを参照することがあります。, ただし、ここで驚いていてはいけません。演習問題としては「統計情報が失効していることを確認する」でしたので、それを確認してみましょう。演習2においてDBMS_STATS.GATHER_SCHEMA_STATSプロシージャで統計情報を収集しましたが、このプロシージャにはもう一つの用途が存在し、「統計情報が失効」もしくは「統計情報が空」と判別されたオブジェクトの一覧を抽出することができてしまうのです。では、解説しますね。, 改めて、マニュアル「PL/SQLパッケージ・プロシージャ及びタイプ・リファレンス」でDBMS_STATS.GATHER_SCHEMA_STATSプロシージャを参照してみると、引数が異なる構文が2つ記述されていていることに気付くと思います。ぱっと見てしまうとほとんど同じ引数が指定されているように思いがちですが、データ型の列をじっくり見ていくと「OUT」と記述されている「objlist」パラメータなるものがあるではないですか。ということで、これを使用します。とは言え、データ型が「ObjectTab」と意味不明な記述になっていることに不安を感じてしまいますよね。今回はこういったものをどのように読み解くのかも解説しておきます。プロシージャをご自身で作成されたことが有る方はご存知だと思いますが、各PL/SQLパッケージには独自のタイプが定義されていることがあります。そして、まさに「ObjectTab」はDBMS_STATSパッケージ独自のタイプであり、きちんとマニュアルに次のような記載があります。, ここでのタイプ「ObjectTab」は、スキーマ名、オブジェクト・タイプ、オブジェクト名、パーティション名、サブ・パーティション名を構成要素とするObjectElemで定義されたレコードを複数行格納するメモリ上の表のような入物だと認識してください。, と言うことで、GATHER_SCHEMA_STATSプロシージャを実行する際、「options」パラメータに「LIST STALE」を指定することで統計情報が失効したと判断されたオブジェクトの一覧が抽出されますが、その結果を格納する為に「objlist」パラメータにObjectTabタイプの変数を指定する必要があるのです。上記の回答例では、TRYスキーマのTBL2表の統計情報が失効していると判断されていることが確認できたかと思います。, ちなみに、「options」パラメータに指定可能な値は次の7つであり、デフォルト(optionsを明示的に記述しない)では「GATHER」が選択される為、スキーマ内の全てのオブジェクトの統計情報を収集してくれているのです。意外と知らないですよね。, さらに、ちなみにですが、表毎の更新履歴はメモリ上に保持されていて定期的にディクショナリへフラッシュすると説明しましたが、最新の監視情報(更新履歴)がディクショナリにフラッシュされていないタイミングで「options => 'GATHER STALE'」で統計情報を収集しようとした場合、どうなるの?DBMS_STATS.FLUSH_DATABASE_MONITORING_INFOプロシージャを実行した後に、統計情報の収集をした方がよいの?という疑問を持たれた方は非常に鋭いです。答えは「気にする必要なし」になります。理由は、GATHER_*_STATSプロシージャを実行すると、監視情報が内部処理で自動的にフラッシュされるからです。これも実はマニュアルに掲載されているのですね。マニュアルを読む必要性を少しは納得して頂けましたかね。, ■ 4. TRYスキーマ内で統計情報が失効しているオブジェクト(TBL2)のみの統計を収集するように、OPTIONSパラメータを適切に設定してDBMS_STATS.GATHER_SCHEMA_STATSプロシージャを実行してください。, 既に演習2で解説していますので、あとは試すだけですね。「options => 'GATHER STALE'」を設定してGATHER_SCHEMA_STATSプロシージャで統計情報を収集してみた結果、統計情報が更新されているのはLAST_ANALYZED列から判断して、TBL2表だけであることが確認できたと思います。, この統計情報の失効を判断する機能をフル活用すれば、実データにほとんど変更が無い表は統計情報を再収集する時間やリソースを省くことが可能になるので、冒頭にも記載させて頂いた通り、日々の統計情報収集に要する時間の短縮が実現できそうですよね。, ■ 5. TRYスキーマ内の全てのオブジェクトに対して、統計情報が失効したと判断する閾値を5%に変更して下さい。, 折角の機会なので、統計情報が失効したと見なす閾値をデフォルト値から変更する方法も体験しておきましょう。, 特定スキーマ内の全てのオブジェクトに対してデフォルト値を変更するには、DBMS_STATS.SET_SCHEMA_PREFSプロシージャとなります。また、失効の閾値は「STALE_PERCENT」パラメータになるので、引数「pname」にこれを指定し、変更後の値を引数「pvalue」に指定します。, この変更が適用されているのかを確認する為には、DBMS_STATS.GET_PREFSファンクションを使用します。それほど難しくは無いと思うので、説明は割愛させて頂きます。結果的には、TRYスキーマ内の全ての表(TBL1、TBL2、TBL3)のSTALE_PERCENTが5%に変更されていることが確認できたかと思います。, ■ 6. OracleDatabaseの「統計情報」とは何か?なぜ取得するのか?運用方法とは?について紹介します。, この記事でOracleDatabase初心者でも分かりやすく統計情報について紹介していますので、, その他DB全体・OS上の情報も統計情報としてOracleDatabaseへ保存します。, 統計情報はOracleDatabaseのオプティマイザーが作成する「実行計画」を作成するためのINPUT情報として使用されます。, 統計情報が存在しないと最適な実行計画が作成されないため、SQLが性能劣化する可能性が高くなります。, ただし「統計情報を取得していない」または「統計情報が古い」イコール「性能劣化」というわけではないので注意しましょう。, それぞれに特性があり、メリット・デメリットも存在しますので正しく使いこなす必要があります。, また「統計情報を固定化すればSQLの性能劣化は発生しない」というのも間違いになります。, 正しい知識をもって正しい統計情報運用することでデータベースをヘルシーに保つことができます。, TodoONada株式会社というIT企業の代表取締役 統計情報の作成は dbms_stats.gather_〜_stats シリーズを利用する。 analyze には フリーリストブロック、validate、行移行、行連鎖 に関する cbo に関係のない情報の取得の機能だけが利用を許されている。(oracle 10g 時点) テーブル統計の収集 Security Zones"を翻訳した... CAPTCHA challenge response provided was incorrect. 統計情報の作成 . 本日はOracleのSYSAUX表領域についてお話ししたいと思います。 Oracle Database 10g から登場したこのSYSAUX表領域ですが、オプション機能で使用するメタデータ(ディクショナリ情報)を格納する領域として使われています。, こちらのSYSAUX表領域については、運用してゆく中でSYSAUX表領域が肥大化してしまったというお話を何度も聞いたことがあります。業務データを格納する領域と異なり、事前に正確な使用量を出すことが難しく皆さん事前見積もりに苦労されているのではないでしょうか。お客様で実際にあった事例を紹介しましょう。, そのお客様では、常に最新の統計情報を取得したいという意向もあり一部のアプリケーションがデータの検索を行う際には必ず統計情報の再取得を行っていたそうです。, 統計情報をDBMS_STATSで取得している場合、デフォルトで31日まで履歴を保持しています。逆に言えば32日以上経過した統計情報履歴は削除されるはず。, ⇒肥大化のためジョブがタイムアウトし、削除されるはずのデータが削除されないと判明。, 設定されたジョブ以外でも、プロシージャを利用した削除方法を使い、削除対象期間を指定し過去の統計情報履歴を削除できる。(dbms_stats.purge_stats), 統計情報履歴の削除期間を指定し削除を試みたが、対象レコードが膨大なため通常の削除では時間が掛かりすぎ削除ができない。, OracleのプロシージャにはPURGE_ALLも用意されており統計情報履歴を一括で削除する場合にはこれを利用することが出来る。(Oracle 11.2.0.3 以降で利用可能), 前述したように、SYSAUX表領域は業務データが格納される領域ではありません。その代わり、Oracleの稼働統計やAWR(Automatic Workload Repository)の スナップショットなどが自動で格納される領域です。Oracleは履歴データのような情報も日々収集しているため、自動メンテナンスに 不備がある場合は今回のようなSYSAUX表領域の肥大化が発生することがあります。他の領域のように、SYSAUX表領域の増加傾向を事前に把握しておくことをお勧めします。, クラウド環境、オンプレミス環境どちらの環境でもデータベースの構築は行いますが、クラウド環境の構築に慣れてしまうと、大変だなぁと思うのはオンプレミス環境での数々のパラメータ設定作業でしょうか。本日はそんなパラメータ設定についてお話しします。, 今回は、実際に保守しているOracle Databaseのアーカイブログ領域をパンクさせないための取り組みをご紹介したいと思います。, 今回は、Oracle Databaseの移行案件時に調査を行ったJA16SJIS(TILDE)からAL32UTF8への移行時の注意点についてご紹介したいと思います。, 「Oracle Database Cloud Service」について、前回に引き続き検証を行っていきます。, DBasSが提供するデータベースへの接続について、Oracle Database Cloud Serviceを題材に、セキュリティの観点から解説します。今回は説明編となります。, 設計構築作業を行っている中で、システム更改が発生した時に欠かせない作業がデータ移行作業です。今回は、RDS for Oracle利用時のデータ移行についてお話します。, MySQLとMariaDBについて最新バージョンをインストールし、各DBの違いについて検証を行いました。, 今回は、「データ仮想化」についてです。SQL Server 2019では、様々な機能拡張や新機能が追加されていますが、その中の1つ「データ仮想化」について少し検証してみました。, RAC環境構築時に要件としてユーザー表領域の暗号化が求められた際に発生した事象についてご紹介します。, 当社のデータベースソリューション本部では、パートナー企業各社様のセミナーに登壇し、技術情報の社外発信に努めています。過去に登壇したセミナーの実績をまとめ、公開いたしました。. Oracle University の無償オンラインセミナーに参加しませんか。11月は限定で ORACLE MASTER 0. リアルなIT業界事情や技術情報を配信中です。. Oracle University 無償オンラインセミナー(11月)