拜年+散分贴《Oracle SQL_TRACE和10046事件优化SQL实例》
一数据库版本LEO1@LEO1select*fromv$version;BANNER--------------------------------------------------------------------------------OracleDatabase11gEnter
一 数据库版本
LEO1@LEO1>select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux:Version 11.2.0.1.0 - Production
NLSRTL Version11.2.0.1.0 - Production
二 演示使用SQL_TRACE和10046事件对其它会话进行跟踪,并给出trace结果
SQL_TRACE:Oracle这个功能主要是为了追踪SQL的执行过程,分析SQL的性能,资源消耗情况。
1.查看SQL是如何操作处理数据
2.查看SQL在执行过程中产生了的等待事件
3.查看SQL的执行过程资源消耗
4.查看SQL的实际执行计划
5.查看SQL的递归语句
6.如果要探索SQL如何执行的可以详细看看
10046:用于分析SQL执行过程中性能消耗情况,可以查看绑定变量信息,可以查看等待事件信息,它比SQL_TRACE输入输出更多参数。
上述工具使用场合:1.优化SQL语句
2.查看SQL语句执行计划
3.跟踪SQL语句执行过程
4.把会话中SQL的信息重定向到一个文件里
SET AUTO TRACE:1.输出SQL语句估算的执行计划(猜出来的)
2.SQL语句并没有真正执行,只关注这条SQL的执行计划对不对
3.只是用来估算执行计划
实验
使用SQL_TRACE对其它会话进行跟踪
如果对当前会话进行跟踪只需alter session set sql_trace=true;即可,如果对其它会话进行跟踪还需要设置另外一些参数。
我们现在做一下,从144会话跟踪12会话的SQL
144会话我们使用leo1用户操作
12会话我们使用leo2用户操作
144会话
LEO1@LEO1> selectdistinct sid from v$mystat; 可以查询当前会话ID
SID
----------------
144
我们用会话ID和串号来唯一定位一个会话,现在我们把2个会话信息都显示出来了
LEO1@LEO1>select sid,serial# from v$session where sid in (144,12);
SID SERIAL#
---------------------------------
12 4472
144 979
这时我有了一个疑问,定位一个会话一般来说看sid就可以了,那么为什么后面还跟着个serial呢,这个serial是干什么用的呢,咨询了一下Alantany 查了一下官方文档
SID NUMBER:Sessionidentifier 就是会话标识
SERIAL# NUMBER :是用来标识唯一一个会话操作对象的,保证这个会话发出的命令可以正确的应用到对应的会话对象上。
场合 一个会话的结束和另一个会话开始都使用了同一个SID,区分这是2个不同的会话
例子
第一次leonarding登陆sid=12,操作了leo1表,退出
SID SERIAL#
---------------------------------
12 4472
第二次Alan登陆sid=12,又操作了leo2表,退出
SID SERIAL#
---------------------------- ----
12 4777
如果只是看SID我们不能分辨出是谁登录了会话操作了leo1表和leo2表,而serial可以分辨出不同会话的命令正确应用到对应的对象上,区分这是2个不同的人登录的会话。
LEO1@LEO1> droptable leo1; 清理环境
Table dropped.
LEO1@LEO1>create table leo1 as select * from dba_objects; 用leo1用户创建leo1表
Table created.
LEO1@LEO1>select count(*) from leo1; 看看有多少条记录
COUNT(*)
----------------
72007
LEO1@LEO1>execute dbms_stats.gather_table_stats('LEO1','LEO1',method_opt=>'for allcolumns size 254');
PL/SQL proceduresuccessfully completed.
随便做个表分析和直方图
LEO1@LEO1> conn/ as sysdba 切换为管理员
Connected.
SYS@LEO1> grantexecute on dbms_system to leo1; 授予执行“系统包”的用户权限给leo1,必须授予否则报错
ERROR atline 1:
ORA-06550:line 1, column 7:
PLS-00201:identifier 'DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION' must be declared
ORA-06550:line 1, column 7:
PL/SQL:Statement ignored
SYS@LEO1> connleo1/leo1 我们在切换回来
LEO1@LEO1>execute sys.dbms_system.set_sql_trace_in_session(12,4472,true);
PL/SQL proceduresuccessfully completed.
启动跟踪会话ID=12,SERIAL=4472的SQL
声明:这个存储过程是SYS用户特有的,网站空间,所以在引用时必须带schema,不带就会报错如下
ERROR atline 1:
ORA-06550:line 1, column 7:
PLS-00201:identifier 'SYS.DBMS_SYSTEM' must be declared
ORA-06550:line 1, column 7:
PL/SQL:Statement ignored
12会话
LEO2@LEO1> select /*+ trace_by_leo1_session*/ count(*) from leo1.leo1; leo2用户查询leo1表
COUNT(*)
----------------

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Oracle 打不開的解決辦法包括:1. 啟動數據庫服務;2. 啟動監聽器;3. 檢查端口衝突;4. 正確設置環境變量;5. 確保防火牆或防病毒軟件未阻止連接;6. 檢查服務器是否已關閉;7. 使用 RMAN 恢復損壞的文件;8. 檢查 TNS 服務名稱是否正確;9. 檢查網絡連接;10. 重新安裝 Oracle 軟件。

解決 Oracle 游標關閉問題的方法包括:使用 CLOSE 語句顯式關閉游標。在 FOR UPDATE 子句中聲明游標,使其在作用域結束後自動關閉。在 USING 子句中聲明游標,使其在關聯的 PL/SQL 變量關閉時自動關閉。使用異常處理確保在任何異常情況下關閉游標。使用連接池自動關閉游標。禁用自動提交,延遲游標關閉。

Oracle 中,FOR LOOP 循環可動態創建游標, 步驟為:1. 定義游標類型;2. 創建循環;3. 動態創建游標;4. 執行游標;5. 關閉游標。示例:可循環創建游標,顯示前 10 名員工姓名和工資。

要停止 Oracle 數據庫,請執行以下步驟:1. 連接到數據庫;2. 優雅關機數據庫(shutdown immediate);3. 完全關機數據庫(shutdown abort)。

在CentOS系統上搭建Hadoop分佈式文件系統(HDFS)需要多個步驟,本文提供一個簡要的配置指南。一、前期準備安裝JDK:在所有節點上安裝JavaDevelopmentKit(JDK),版本需與Hadoop兼容。可從Oracle官網下載安裝包。環境變量配置:編輯/etc/profile文件,設置Java和Hadoop的環境變量,使系統能夠找到JDK和Hadoop的安裝路徑。二、安全配置:SSH免密登錄生成SSH密鑰:在每個節點上使用ssh-keygen命令

可以通過使用 Oracle 的動態 SQL 來根據運行時輸入創建和執行 SQL 語句。步驟包括:準備一個空字符串變量來存儲動態生成的 SQL 語句。使用 EXECUTE IMMEDIATE 或 PREPARE 語句編譯和執行動態 SQL 語句。使用 bind 變量傳遞用戶輸入或其他動態值給動態 SQL。使用 EXECUTE IMMEDIATE 或 EXECUTE 執行動態 SQL 語句。

打開 Oracle 數據庫的步驟如下:打開 Oracle 數據庫客戶端連接到數據庫服務器:connect username/password@servername使用 SQLPLUS 命令打開數據庫:SQLPLUS

AWR 報告是顯示數據庫性能和活動快照的報告,解讀步驟包括:識別活動快照的日期和時間。查看活動、資源消耗的概覽。分析會話活動,找出會話類型、資源消耗和等待事件。查找潛在性能瓶頸,如緩慢的 SQL 語句、資源爭用和 I/O 問題。查看等待事件,識別並解決它們以提高性能。分析閂鎖和內存使用模式,以識別導致性能問題的內存問題。
