名站网址导航为大家提供关于数据库教程相关的教程网站知识。
[Oracle] RAC 之 - 负载均衡深入解析
Oracle RAC提供两种相关方式实现负载均衡,第一种是纯技术手段,即在用户连接时,根据系统当前的负载情况决定由哪个节点处理用户请求;第二种是面向业务,人为的把应用切分成很多service,通过某个se,纯技术手段 (面向连接的负载均衡),1. 客户端负载均衡 配置具体相关方法是在客户端tnsnames.ora网站网站文件中设置LOAD_BALANCE=YES,当客户端发起连接时,会从地址列表中随机选取一个,把连接请求随机分散给各个实例。 这个技术的最,2. 站点服务器端负载均衡 站点服务器端负载均衡依赖于Listener收集的负载信息,在网站数据库运行过程中,pmon进程会收集系统的负载信息,定期更新至Listener中。假如如果您配置了Remote_listen,面向业务手段 (利用Service负载均衡) 上面介绍了纯技术手段进行的负载均衡,看起来很美好,但在实际使用中,可能会带来非常大的性能问题。大家都知道,RAC由于其share-disk的架构,它的性能
1. 预估执行计划 - Explain Plan
Explain plan以SQL数据库语句作为输入,得到这条SQL数据库语句的执行计划,并将执行计划输出存储到计划表中。
首先,在您要执行的SQL数据库语句前加explain plan for,此时将生成的执行计划存储到计划表中,数据库语句如下:
explain plan for SQL数据库语句
然后,在计划表中查询刚刚生成的执行计划,数据库语句如下:
select * from table(dbms_xplan.display);
注意:Explain plan只生成执行计划,并不会真正执行SQL数据库语句,因此产生的执行计划有可能不准,因为:
1)当前的环境可能和执行计划生成时的环境不同;
2)不会考虑绑定变量的数据类型;
3)不进行变量窥视。
2. 查询内存中数据缓存的执行计划 (dbms_xplan.display_cursor)
假如如果您想获取正在执行的或刚执行结束的SQL数据库语句真实的执行计划(即获取library cache中的执行计划),可以到动态性能视图里查询。具体相关方法如下:
1)获取SQL数据库语句的游标
游标分为父游标和子游标,父游标由sql_id(或联合address和hash_value)字段表示,子游标由child_number字段表示。
假如如果SQL数据库语句正在运行,可以从v$session中获得它的游标信息,如:
select status, sql_id, sql_child_number from v$session where status='ACTIVE' and ....
假如如果知道SQL数据库语句包含某些关键字,可以从v$sql视图中获得它的游标信息,如:
select sql_id, child_number, sql_text from v$sql where sql_text like '%关键字%‘
2)获取库数据缓存中的执行计划
为了获取数据缓存库中的执行计划,可以直接查询动态性能视图v$sql_plan和v$sql_plan_statistics_all等,但更方便的具体相关方法是以sql_id和子游标为参数,执行如下数据库语句:
select * from table(dbms_xplan.display_cursor('sql_id',child_number));
3)获取前一次的执行计划:
set serveroutput off
select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));
3. 查询历史执行计划(dbms_xplan.display_awr)
AWR会定时把动态性能视图中的执行计划保存到dba_hist_sql_plan视图中,假如如果您想要查看历史执行计划,可以采用如下具体相关方法查询:
select * from table(dbms_xplan.display_awr('sql_id');
4. 在用sqlplus做SQL开发是(Autotrace)
set autotrace是sqlplus相关工具的一个功能,只能在通过sqlplus连接的session中使用,它非常适合在开发时测试SQL数据库语句的性能,有以下几种参数可供选择:
SET AUTOTRACE OFF ---------------- 不显示执行计划和统计信息,这是缺省模式
SET AUTOTRACE ON EXPLAIN ------ 只显示网站seo优化器执行计划
SET AUTOTRACE ON STATISTICS -- 只显示统计信息
SET AUTOTRACE ON ----------------- 执行计划和统计信息同时显示
SET AUTOTRACE TRACEONLY ------ 不真正执行,只显示预期的执行计划,同explain plan
5. 生成Trace网站网站文件查询详细的执行计划 (SQL_Trace, 10046)
SQL_TRACE作为初始化参数可以在实例级别启用,也可以只在会话级别启用,在实例级别启用SQL_TRACE会导致所有进程的活动被跟踪,包括后台进程及所有用户进程,这通常会导致比较严重的性能问题,所以在一般情况下,咱们使用sql_trace跟踪当前进程,具体相关方法如下:
SQL>alter session set sql_trace=true;
...被跟踪的SQL数据库语句...
SQL>alter session set sql_trace=false;
假如如果要跟踪其它进程,可以通过Oracle提供的系统包DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION来实现,例如:
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true) --开始跟踪
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,false) --结束跟踪
生成trace网站网站文件后,再用tkprof 相关工具将sql trace 生成的跟踪网站网站文件转换成易读的格式,语法如下:
tkprof inputfile outputfile
10046事件是SQL_TRACE的一个升级版,它也是追踪会话,生成Trace网站网站文件,只是它里面的内容更详细,