SQL TRACE和TKPROF的使用步骤

Jun 07, 2016 pm 05:07 PM
オラクルデータベース

1.设置参数文件 设置三个参数timed_statistics、user_dump_dest、max_dump_file_size。 timed_staticstices 用于启动或禁止对定

1.设置参数文件 timed_staticstices

用于启动或禁止对定时统计信息(如CPU时间、占用时间),以及动态性能表中多种统计信息的收集功能

SQL>alter session set timed_statistics = true;

SQL>alter system set timed_statistics = true;

max_dump_file_size

当实例层启用SQL TRACE的时候,在每次请求服务器的时候,都将在跟踪文件中产生一个文本行,这些文件的最大尺寸受限于初始化参数的设置。默认为500(blocks)。若里面的数据被截断则增大SIZE。若为UNLIMITED则意味着没有上限。

user_dump_dest

设置跟踪文件的存储位置。默认为admin/用户/udump;

SQL>alter system set user_dump_dest = 'newdir';

2.启动SQL TRACE实用工具

对会话启动关闭SQL TRACE

SQL>alter session set sql_trace = true;

SQL>alter session set sql_trace = false;

SQL>exec SYS.DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION =(SID,SERIAL#,TRUE);

SQL>exec SYS.DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION =(SID,SERIAL#,,FALSE);

对用户实例启动关闭SQL TRACE

SQL>alter system set sql_trace = true;

SQL>alter system set sql_trace = false;

3.使用tkprof格式化trace文件     

Usage

tkprof inputfile outputfile [optional | parameters ] 

(tkprof tracefile outputfile [explain= ] [table= ] [print= ] [insert= ] [sys= ] [sort= ])

例:1.tkprof tracefile outfile [explain=user/password] [options...];

例:2.tkprof uat_ora_14936.trc trace.txt sort=(prsdsk,exedsk,fchdsk) print=10 explain=apps/apps table=apps.temp_plan_table_a insert=storea.sql sys=no

tkprof参数和选项

  • explain=user/password 执行explain命令将结果放在SQL trace的输出文件中  
  • table=schema.table 指定tkprof处理sql trace文件时临时表的模式名和表名  
  • insert=scriptfile 创建一个文件名为scriptfile的文件,包含了tkprof存放的输出sql语句  
  • sys=[yes/no] 确定系统是否列出由sys用户产生或重调的sql语句  
  • print=number 将仅生成排序后的第一条sql语句的输出结果  
  • record=recordfile 这个选项创建一个名为recorderfile的文件,包含了所有重调用的sql语句  
  • sort=sort_option 按照指定的方法对sql trace的输出文件进行降序排序  
  • sort_option 选项  
  •    prscnt  按解析次数排序  
  •    prscpu  按解析所花cpu时间排序  
  •    prsela  按解析所经历的时间排序  
  •    prsdsk  按解析时物理的读操作的次数排序  
  •    prsqry  解析时以一致模式读取数据块的次数排序  
  •    prscu   按解析时以当前读取数据块的次数进行排序  
  •    execnt  按执行次数排序  
  •    execpu  按执行时花的cpu时间排序  
  •    exeela  按执行所经历的时间排序  
  •    exedsk  按执行时物理读操作的次数排序  
  •    exeqry  按执行时以一致模式读取数据块的次数排序  
  •    execu   按执行时以当前模式读取数据块的次数排序  
  •    exerow  按执行时处理的记录的次数进行排序  
  •    exemis  按执行时库缓冲区的错误排序  
  •    fchcnt  按返回数据的次数进行排序  
  •    fchcpu  按返回数据cpu所花时间排序  
  •    fchela  按返回数据所经历的时间排序  
  •    fchdsk  按返回数据时的物理读操作的次数排序  
  •    fchqry  按返回数据时一致模式读取数据块的次数排序  
  •    fchcu   按返回数据时当前模式读取数据块的次数排序  
  •    fchrow  按返回数据时处理的数据数量排序  
  • 4.举例:

    trace其他session

    查询某用户的session的SID及SERIAL#

    $sqlplus / as sysdba

    SQL>select s.USERNAME,s.SID,s.SERIAL#,s.COMMAND from v$session s

    where s.USERNAME='ETOH' ; --注意用户名用大写

    SQL>exec dbms_system.SET_SQL_TRACE_IN_SESSION(12,73,true);

    等待被跟踪session活动一段时间

    SQL>exec dbms_system.SET_SQL_TRACE_IN_SESSION(12,73,false);

    --查询生成的.trc文件号

    SQL>SELECT d.value || '/' || lower(rtrim(i.instance, chr(0))) || '_ora_' ||

          p.spid || '.trc' trace_file_name

     from (select p.spid

             from v$session s, v$process p

            where s.sid = &sid

              and s. SERIAL# = &serial#

    and p.addr = s.paddr) p,

          (select t.instance

             from v$thread t, v$parameter v

            where v.name = 'thread'

              and (v.value = 0 or t.thread# = to_number(v.value))) i,

          (select value from v$parameter where name = 'user_dump_dest') d;

    --使用tkprof生成分析文件

    $tkprof /u01/app/Oracle/admin/center/udump/_ora_24012.trc/u01/app/oracle/admin/center/udump/center_ora_24012.txt aggregate=yes sys=no sort=fchela(此例中将执行最耗时的sql放在分析文件的开头)


    trace本session

    查询本session信息

    SQL>SELECT Sid, Serial# FROM V$session WHERE sid = Sys_Context ( 'USERENV' , 'SID' );

    SQL>alter session set sql_trace=true;

    SQL>#SQL Statements#

    SQL>alter session set sql_trace=false;

    查询生成的trace文件名

    SQL>SELECT d.value || '/' || lower(rtrim(i.instance, chr(0))) || '_ora_' ||

          p.spid || '.trc' trace_file_name

     from (select p.spid

             from v$mystat m, v$session s, v$process p

            where m.statistic# = 1

              and s.sid = m.sid

              and p.addr = s.paddr) p,

          (select t.instance

             from v$thread t, v$parameter v

            where v.name = 'thread'

              and (v.value = 0 or t.thread# = to_number(v.value))) i,

          (select value from v$parameter where name = 'user_dump_dest') d;

    tkprof格式化处理

    $tkprofcenter_ora_24012.trccenter_ora_24012.txt {一系列参数}

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

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

    SublimeText3 中国語版

    SublimeText3 中国語版

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

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

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

    Oracle でテーブルがどのテーブルスペースに属しているかを確認する方法 Oracle でテーブルがどのテーブルスペースに属しているかを確認する方法 Jul 06, 2023 pm 01:31 PM

    Oracle でテーブルがどのテーブルスペースに属しているかを確認する方法: 1. 「SELECT」ステートメントを使用し、テーブル名を指定して、指定したテーブルが属するテーブルスペースを検索します; 2. Oracle が提供するデータベース管理ツールを使用して確認します。表が属する表スペース。ツールは通常、操作をより直観的かつ便利にするグラフィカル・インターフェースを提供します。3. SQL*Plus では、「DESCRIBEyour_table_name;」コマンドを入力すると、表が属する表スペースを表示できます。 。

    PDO を使用して Oracle データベースに接続する方法 PDO を使用して Oracle データベースに接続する方法 Jul 28, 2023 pm 12:48 PM

    PDO を使用して Oracle データベースに接続する方法の概要: PDO (PHPDataObjects) は、PHP でデータベースを操作するための拡張ライブラリであり、複数の種類のデータベースにアクセスするための統合 API を提供します。この記事では、PDO を使用して Oracle データベースに接続し、一般的なデータベース操作を実行する方法について説明します。ステップ: Oracle データベース ドライバー拡張機能をインストールする PDO を使用して Oracle データベースに接続する前に、対応する Oracle をインストールする必要があります

    Oracleで重複データを1つだけ取得する方法 Oracleで重複データを1つだけ取得する方法 Jul 06, 2023 am 11:45 AM

    Oracle が重複データを 1 つだけフェッチする手順: 1. SELECT ステートメントを GROUP BY および HAVING 句と組み合わせて使用​​し、重複データを検索します。 2. ROWID を使用して重複データを削除し、正確な重複データ レコードが削除されるようにします。重複データを削除するには、「ROW_NUMBER」() 関数を使用します。これにより、重複データの各セットの最初のレコードを除くすべてのレコードが削除されます。 3. 「select count(*) from」ステートメントを使用して、削除されたレコードの数を返します。結果を保証します。

    PHP および Oracle データベースへのデータ インポートを実装する PHP および Oracle データベースへのデータ インポートを実装する Jul 12, 2023 pm 06:46 PM

    PHP および Oracle データベースへのデータ インポートの実装 Web 開発では、サーバー側のスクリプト言語として PHP を使用すると、データベースを便利に操作できます。一般的なリレーショナル データベース管理システムとして、Oracle データベースは強力なデータ ストレージ機能と処理機能を備えています。この記事では、PHP を使用して Oracle データベースにデータをインポートする方法と、対応するコード例を紹介します。まず、PHP と Oracle データベースがインストールされていること、および PHP が次のように構成されていることを確認する必要があります。

    PHP および Oracle データベース接続プールを効率的に使用する方法 PHP および Oracle データベース接続プールを効率的に使用する方法 Jul 12, 2023 am 10:07 AM

    PHP および Oracle データベースで接続プーリングを効率的に使用する方法 はじめに: PHP アプリケーションを開発する場合、データベースの使用は不可欠な部分です。 Oracle データベースと対話する場合、アプリケーションのパフォーマンスと効率を向上させるには接続プールの使用が重要です。この記事では、PHP で Oracle データベース接続プールを効率的に使用する方法と、対応するコード例を紹介します。 1. コネクションプーリングの概念とメリット コネクションプーリングとは、データベースのコネクションを管理する技術で、あらかじめコネクションをまとめて作成し、コネクションを維持します。

    OracleデータベースにはJDKが必要ですか? OracleデータベースにはJDKが必要ですか? Jun 05, 2023 pm 05:06 PM

    oracle データベースには jdk が必要です。その理由は、1. 特定のソフトウェアや機能を使用する場合、JDK に含まれる他のソフトウェアやライブラリが必要であること、2. Oracle データベースで Java プログラムを実行するには Java JDK をインストールする必要があること、3. JDK であることです。 Java アプリケーション関数の開発とコンパイルを提供します。 4. 特定の関数の実装と実装に役立つ Java 関数に対する Oracle の要件を満たします。

    php を使用して PDO を拡張し、Oracle データベースに接続する方法 php を使用して PDO を拡張し、Oracle データベースに接続する方法 Jul 29, 2023 pm 07:21 PM

    PHP を使用して PDO を拡張し、Oracle データベースに接続する方法 はじめに: PHP は非常に人気のあるサーバー側プログラミング言語であり、Oracle は一般的に使用されるリレーショナル データベース管理システムです。この記事では、PHP 拡張機能 PDO (PHPDataObjects) を使用して Oracle データベースに接続する方法を紹介します。 1. PDO_OCI 拡張機能のインストール Oracle データベースに接続するには、まず PDO_OCI 拡張機能をインストールする必要があります。 PDO_OCI 拡張機能をインストールする手順は次のとおりです。

    Oracle がストアド プロシージャにテーブルが存在するかどうかを判断する方法 Oracle がストアド プロシージャにテーブルが存在するかどうかを判断する方法 Jul 06, 2023 pm 01:20 PM

    ストアド プロシージャにテーブルが存在するかどうかを判断する Oracle の手順は次のとおりです。 1. 「user_tables`」システム テーブルを使用して現在のユーザーのテーブル情報をクエリし、受信したテーブル名「p_table_name」と「table_name」フィールドを比較し、条件が満たされると、「COUNT(*)」は 0 より大きい値を返します; 2. 「SET SERVEROUTPUT ON;」ステートメントと「EXEC`」キーワードを使用してストアド プロシージャを実行し、テーブル名をテーブル名に渡します。テーブルが存在するかどうかを判断します。

    See all articles