ホームページ データベース mysql チュートリアル 最权威Oracle获取SQL语句执行计划大全

最权威Oracle获取SQL语句执行计划大全

Jun 07, 2016 pm 04:00 PM

该文档为根据相关资料整理、总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威、最正确的方法、步骤,此外,还详细

该文档为根据相关资料整理、总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威、最正确的方法、步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅使用。

1、查询v$sql_plan:

SQL> col "Query Plan_Table" format a100

SQL> select id,lpad(' ', 2*(level-1))||operation||''||options||' '||object_name||' '||decode(id, 0, 'Cost='||cost) "QueryPlan_Table"

      fromv$sql_plan

      startwith id = 0

        andsql_id = '&&sql_id'

        andplan_hash_value = &&plan_hash

    connect byprior id = parent_id

        andsql_id = '&&sql_id'

        andplan_hash_value = &&plan_hash;

--注::SQL_ID可查v$sqltext和dba_hist_sqltext,也可通过其他途径获得。

 

2、通过包DBMS_XPLAN

1)DISPLAY

SQL>explain plan for select * from t_users whereuser_id='TEST';

SQL>select * from table(dbms_xplan.display());

SQL>select * fromtable(dbms_xplan.display(null,null,'BASIC ROWS BYTES'));

--注:

1.TABLE_NAME:存储查询计划的表名,默认值为PLAN_TABLE。

2.STATEMENT_ID :SQL 语句ID。可在执行ExplainPlan 命令时,通过SetStatement_

id 子句来指定。如为NULL,则取最近一条被解释的语句。

3.FORMAT:输出格式。在DISPLAY 函数中,有以下预定义格式选:

1)'BASIC' :基本格式。输出的内容最少,仅输出查询计划中每个操作的ID、名称和选项及操作对象名。

2)'TYPICAL':典型格式。除了基本格式中的内容外,还输出每个操作的记录行数、

字节数、代价和时间,以及相关的提示信息(如远程SQL、优化器建议等)。如

存在谓词,,还输出每个操作中的过滤条件和访问条件。此外,如涉及分区表,还输出分区裁剪信息;如涉及并行查询,还输出并行操作信息(如表队列信息、并行查询分布方式等)。为默认格式。

3)'SERIAL':串行执行格式。这种格式和典型格式的输出内容基本一致,不同之处在于,对并行查询,它不会输出相关的并行内容。

4)'ALL':完全格式。输出的内容相对完整。除了典型格式的内容以外,还会输出字段投影信息和别名信息。

此外,用户还可通过在格式化字符串中添加或屏蔽一些关键词进行细化输出,

例如:“BASICROWS”,“TYPICAL-PREDICATE”等

1)ROWS:优化器估算出的记录行数;

2)BYTES:优化器估算出的字节数;

3)COST:优化器估算出的代价;

4)PARTITION:分区裁剪;

5)PARALLEL:并行查询;

6)PREDICATE:谓词;

7)PROJECTION:字段投射;

8)ALIAS:别名;

9)REMOTE:分布式查询信息;

10)NOTE:相关注释信息。

2)DISPLAY_CURSOR

SQL>select /*+gather_plan_statistics*/* fromt_users where user_id='TEST';

SQL>select * fromtable(dbms_xplan.display_cursor(null,null,'BASIC LAST ALLSTATS'));

--注:

1.DISPLAY_CURSOR 函数可以显示内存中一个或者多个游标的执行计划;

2.用户须对视图V$SQLV、$SQL_PLAN 和V$SQL_PLAN_STATISTICS_ALL 的SELECT有权限;

3.参数:

1)SQL_ID:如果没有指定SQL_ID(指定NULL),则默认会显示当前会话中最后一条执行的SQL 语句。

2)CURSOR_CHILD_NO:语句的子游标序号,如果不指定,则会显示该语句的所有子游标的执行计划。

3)FORMAT:格式化控制字符串。DISPLAY 函数的格式化控制字符串的所有选项都适用于DISPLAY_CURSOR 函数。如运行语句时通过GATHER_PLAN_STATISTICS或设置系统参数STATISTICS_LEVEL 为“ALL”收集语句运行的性能统计数据,则在细化选项中还有额外的选项,以选择是否输出这些数据。

4)IOSTATS:是否输出计划的输入输出(IO)统计数据;

5)MEMSTATS :在启用了PGA 自动管理的情况下,是否输出计划的输入内存统计数据(内存使用量、内存读次数等);

6)ALLSTATS:包含了IOSTATS和MEMSTATS 的全部内容;

7) LAST :以上三个选项输出的是该游标所有执行所产生的数据的总和。也可增加LAST选项以限定仅显示最后一次运行的统计数据。

此外,还有一些选项可用于该函数的输出控制:

8)'ADVANCED' :高级格式。高级格式除了会输出完全格式中的所有内容外,还会视情况输出绑定变量窥视信息和计划概要信息;

9) OUTLINE:是否以提示方式显示计划概要;

10)PEEKED_BINDS:是否显示绑定变量窥视信息;

11)BUFFSTATS:是否显示内存读次数(包括一致性读和当前读次数),该信息为IOSTATS 的一部分;

12)PLAN_HASH:是否显示计划的哈希值,该选项同样适用于DISPLAY函数。

3)DISPLAY_AWR

SQL>select sql_id, to_char(substr(sql_text,0,2000))

      fromdba_hist_sqltext

    whereupper(sql_text) like 'SELECT * FROM TEST%';

SQL>select * fromtable(dbms_xplan.display_awr('&sql_id'));

--注:

1.DISPLAY_AWR 函数显示存储在AWR历史数据的执行计划。

2.须对以下视图有SELECT权限:DBA_HIST_SQL_PLAN 和DBA_HIST_SQLTEXT。

3.参数:

1)SQL_ID :可以从DBA_HIST_SQL_PLAN.SQL_ID或DBA_HIST_SQLTEXT.SQL_ID 获得,该参数必须指定非空值,没有默认值;

2)PLAN_HASH_VALUE :如果该参数未指定或为NULL,则会显示语句的所有执行计划;

3)DB_ID:指定显示哪个数据库的执行计划,默认为本地数据库ID。页可将其他数据库的AWR导入本地库进行分析。

4)FORMAT:格式化控制字符串。与DISPLAY的相同选项类似。

 

4)DISPLAY_SQLSET

SQL>declare

2 ss_name varchar2(60);

3 begin

4 ss_name :=dbms_sqltune.create_sqlset();

5 dbms_sqltune.capture_cursor_cache_sqlset(ss_name,600,100);

6 dbms_output.put_line(ss_name);

7 end;

8 /

SQL>select sqlset_name,sql_id,sql_text fromDBA_SQLSET_STATEMENTS where upper(sql_text)

like 'SELECT * FROM TEST%';

SQL>select * fromtable(dbms_xplan.display_sqlset('STS_6','abcdefg',null,'BASIC ROWS COST'));

--注:

1.DISPLAY_SQLSET函数显示存储在一个SQL调优集中的语句的执行计划。

2.参数:

1)SQLSET_NAME:SQL 集的名称。每个SQL 集都有一个单独的名称(可在创建时

用户指定,也可系统自动生成),需指定从哪个SQL集中读取和显示语句的执行计划,该参数没有默认值,必须指定;

2)SQL_ID :可从USER/DBA/ALL_SQLSET_PLANS.SQL_ID获得,该参数必须指定非空值,没有默认值;

3)PLAN_HASH_VALUE:如果未指定或为NULL,则会显示语句的所有执行计划;

4)FORMAT:格式化控制字符串。与DISPLAY的FORMAT 选项相同;

5)SQLSET_OWNER:SQL集的所有者,默认为当前用户名。

5)DISPLAY_SQL_PLAN_BASELINE

SQL>select * fromtable(dbms_xplan.display_sql_plan_baseline(sql_handle =>

'SYS_SQL_66cc81707e560a32'));

--注:

1.DISPLAY_SQL_PLAN_BASELINE 函数显示存储在数据字典当中SQL 执行计划基线的计划。

2.参数:

1)SQL_HANDLE:执行计划基线所属SQL的句柄名称,由Oracle在创建或载入执行计划到基线当中时自动生成,可以通过视图dba_sql_plan_baselines查询,默认为NULL;

2)PLAN_NAME :执行计划基线中某个执行计划的名称,由Oracle 创建或载入执行计划到基线当中时自动生成,可以通过视图dba_sql_plan_baselines查询,默认为NULL;

3)FORMAT :格式化控制字符串。DISPLAY_SQLSET 函数的格式化选项与DISPLAY

的选项相同。

4)当SQL_HANDLE和PLAN_NAME 都为空时,显示所有基线数据中的全部执行计划。

 

3、AUTOTRACE

1)配置test用户使用autot

SQL>conn sys/sys as sysdba

SQL>@?/SQLPLUS/ADMIN/PLUSTRCE.SQL

SQL>grant plustrace totest;

2)使用方法

1.SET AUTOTRACE ON:打开AUTOTRACE,并输出所有内容,包括语句本身的查询结果、执行计划,以及性能统计数据。

2.SET AUTOTRACE ON EXPLAIN :打开AUTOTRACE,并输出语句本身的查询结果和执行计划,不输出性能统计数据。

3.SET AUTOTRACE ON STATISTICS :打开AUTOTRACE,并输出语句本身的查询结果和性能统计数据,不输出执行计划。

4.SET AUTOTRACE TRACE :打开AUTOTRACE,并输出执行计划和性能统计数据,不输出语句本身的查询结果。

5.SET AUTOTRACE TRACE EXPLAIN :打开AUTOTRACE,并输出执行计划,不输出语句本身的查询结果和性能统计数据。

6.SET AUTOTRACE TRACESTATISTICS:打开AUTOTRACE,并输出性能统计数据,不输出语句本身的查询结果和执行计划。

7.SET AUTOTRACE OFF:关闭AUTOTRACE。

 

4、其他方法

1)SQL_TRACE(或者10046 跟踪事件):该方法会在跟踪文件里显示执行计划及相关统计信息:

SQL>alter session set sql_trace=true;

SQL>select * from t_users where user_id=’TEST’;

SQL>alter session set sql_trace=false;

SQL>select distinct spid from v$process p,v$session s, v$mystat m where p.addr=s.paddr and s.sid=m.sid;

SQL>show parameter user_dump_dest

SQL>ed/home/oracle/admin/ora10g/udump/ora10g_ora_sid.trc

2)OPTIMIZER_TRACE(或者10053 跟踪事件):该方法会在跟踪文件里记录优化器分析选择执行计划的过程:

SQL>alter session set"_optimizer_trace"=ALL;

SQL>explain plan for select * from t_users whereusername=’TEST’;

SQL>alter session set"_optimizer_trace"=NONE;

SQL>select distinct spid from v$process p,v$session s, v$mystat m where p.addr=s.paddr and s.sid=m.sid;

SQL>ed/home/oracle/admin/ora10g/udump/ora10g_ora_sid.trc

本文永久更新链接地址

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQLでインデックスを使用するよりも、フルテーブルスキャンがいつ速くなるのでしょうか? MySQLでインデックスを使用するよりも、フルテーブルスキャンがいつ速くなるのでしょうか? Apr 09, 2025 am 12:05 AM

完全なテーブルスキャンは、MySQLでインデックスを使用するよりも速い場合があります。特定のケースには以下が含まれます。1)データボリュームは小さい。 2)クエリが大量のデータを返すとき。 3)インデックス列が高度に選択的でない場合。 4)複雑なクエリの場合。クエリプランを分析し、インデックスを最適化し、オーバーインデックスを回避し、テーブルを定期的にメンテナンスすることにより、実際のアプリケーションで最良の選択をすることができます。

Windows 7にMySQLをインストールできますか? Windows 7にMySQLをインストールできますか? Apr 08, 2025 pm 03:21 PM

はい、MySQLはWindows 7にインストールできます。MicrosoftはWindows 7のサポートを停止しましたが、MySQLは引き続き互換性があります。ただし、インストールプロセス中に次のポイントに注意する必要があります。WindowsのMySQLインストーラーをダウンロードしてください。 MySQL(コミュニティまたはエンタープライズ)の適切なバージョンを選択します。インストールプロセス中に適切なインストールディレクトリと文字セットを選択します。ルートユーザーパスワードを設定し、適切に保ちます。テストのためにデータベースに接続します。 Windows 7の互換性とセキュリティの問題に注意してください。サポートされているオペレーティングシステムにアップグレードすることをお勧めします。

MySQL:簡単な学習のためのシンプルな概念 MySQL:簡単な学習のためのシンプルな概念 Apr 10, 2025 am 09:29 AM

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

mysqlとmariadbは共存できますか mysqlとmariadbは共存できますか Apr 08, 2025 pm 02:27 PM

MySQLとMariaDBは共存できますが、注意して構成する必要があります。重要なのは、さまざまなポート番号とデータディレクトリを各データベースに割り当て、メモリ割り当てやキャッシュサイズなどのパラメーターを調整することです。接続プーリング、アプリケーションの構成、およびバージョンの違いも考慮する必要があり、落とし穴を避けるために慎重にテストして計画する必要があります。 2つのデータベースを同時に実行すると、リソースが制限されている状況でパフォーマンスの問題を引き起こす可能性があります。

バングラ部分モデル検索のlaravelEloquent orm) バングラ部分モデル検索のlaravelEloquent orm) Apr 08, 2025 pm 02:06 PM

LaravelEloquentモデルの検索:データベースデータを簡単に取得するEloquentormは、データベースを操作するための簡潔で理解しやすい方法を提供します。この記事では、さまざまな雄弁なモデル検索手法を詳細に紹介して、データベースからのデータを効率的に取得するのに役立ちます。 1.すべてのレコードを取得します。 ALL()メソッドを使用して、データベーステーブルですべてのレコードを取得します:useapp \ models \ post; $ post = post :: all();これにより、コレクションが返されます。 Foreach Loopまたはその他の収集方法を使用してデータにアクセスできます。

RDS MySQL Redshift Zero ETLとの統合 RDS MySQL Redshift Zero ETLとの統合 Apr 08, 2025 pm 07:06 PM

データ統合の簡素化:AmazonrdsmysqlとRedshiftのゼロETL統合効率的なデータ統合は、データ駆動型組織の中心にあります。従来のETL(抽出、変換、負荷)プロセスは、特にデータベース(AmazonrdsmysQlなど)をデータウェアハウス(Redshiftなど)と統合する場合、複雑で時間がかかります。ただし、AWSは、この状況を完全に変えたゼロETL統合ソリューションを提供し、RDSMYSQLからRedshiftへのデータ移行のための簡略化されたほぼリアルタイムソリューションを提供します。この記事では、RDSMysQl Zero ETLのRedshiftとの統合に飛び込み、それがどのように機能するか、それがデータエンジニアと開発者にもたらす利点を説明します。

MySQLユーザーとデータベースの関係 MySQLユーザーとデータベースの関係 Apr 08, 2025 pm 07:15 PM

MySQLデータベースでは、ユーザーとデータベースの関係は、アクセス許可と表によって定義されます。ユーザーには、データベースにアクセスするためのユーザー名とパスワードがあります。許可は助成金コマンドを通じて付与され、テーブルはCreate Tableコマンドによって作成されます。ユーザーとデータベースの関係を確立するには、データベースを作成し、ユーザーを作成してから許可を付与する必要があります。

MySQL:初心者向けのデータ管理の容易さ MySQL:初心者向けのデータ管理の容易さ Apr 09, 2025 am 12:07 AM

MySQLは、インストールが簡単で、強力で管理しやすいため、初心者に適しています。 1.さまざまなオペレーティングシステムに適した、単純なインストールと構成。 2。データベースとテーブルの作成、挿入、クエリ、更新、削除などの基本操作をサポートします。 3.参加オペレーションやサブクエリなどの高度な機能を提供します。 4.インデックス、クエリの最適化、テーブルパーティション化により、パフォーマンスを改善できます。 5。データのセキュリティと一貫性を確保するために、バックアップ、リカバリ、セキュリティ対策をサポートします。

See all articles