sql >> データベース >  >> RDS >> Oracle

Oracleで時間のかかるSQLクエリのトップ5

    このSQLステートメントは開始するのに便利な場所であることがわかりました(申し訳ありませんが、これを元の作成者に帰することはできません。インターネット上のどこかで見つけました):

    SELECT * FROM
    (SELECT
        sql_fulltext,
        sql_id,
        elapsed_time,
        child_number,
        disk_reads,
        executions,
        first_load_time,
        last_load_time
    FROM    v$sql
    ORDER BY elapsed_time DESC)
    WHERE ROWNUM < 10
    /
    

    これにより、経過時間順にSQLキャッシュに現在格納されている上位のSQLステートメントが検索されます。ステートメントは時間の経過とともにキャッシュから消えるので、正午に仕事に取り掛かるときに昨夜のバッチジョブを診断しようとするのは良くないかもしれません。

    disk_readsと実行による順序付けを試すこともできます。一部の貧弱なアプリケーションは同じSQLステートメントを何度も送信するため、実行は便利です。このSQLは、バインド変数を正しく使用していることを前提としています。

    次に、sql_idを取得できます およびchild_number 声明の中で、この赤ちゃんにそれらを与えます:-

    SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id', &child));
    

    これは、SQLキャッシュからの実際の計画とSQLの全文を示しています。



    1. INSERT [...] ON CONFLICTを外部キー違反に使用できますか?

    2. パーティションスイッチングを使用した中断の少ないSQLServerテーブルの更新

    3. 既存の設定を失うことなくMySQLのsql_modeにオプションを追加する方法

    4. データベースのパフォーマンス調整にはどのようなリソースがありますか?