阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle 12c(12.1)中性能优化&功能增强之通过参数THREADED_EXECTION使用多线程模型

186次阅读
没有评论

共计 4403 个字符,预计需要花费 12 分钟才能阅读完成。

1.  后台

UNIX/Linux 系统上,Oracle 用多进程模型。例如:linux 上一个常规安装的数据库会有如下进程列:

$ ps -ef | grep [o]ra_

oracle  15356    1  0 10:53 ?        00:00:00 ora_pmon_db12c

oracle  15358    1  0 10:53 ?        00:00:00 ora_psp0_db12c

oracle  15360    1  8 10:53 ?        00:01:27 ora_vktm_db12c

oracle  15364    1  0 10:53 ?        00:00:00 ora_gen0_db12c

oracle  15366    1  0 10:53 ?        00:00:00 ora_mman_db12c

oracle  15370    1  0 10:53 ?        00:00:00 ora_diag_db12c

oracle  15372    1  0 10:53 ?        00:00:00 ora_dbrm_db12c

oracle  15374    1  0 10:53 ?        00:00:00 ora_dia0_db12c

oracle  15376    1  0 10:53 ?        00:00:00 ora_dbw0_db12c

oracle  15378    1  010:53 ?        00:00:00 ora_lgwr_db12c

oracle  15380    1  0 10:53 ?        00:00:00 ora_ckpt_db12c

oracle  15382    1  0 10:53 ?        00:00:00 ora_smon_db12c

oracle  15384    1  0 10:53 ?        00:00:00 ora_reco_db12c

oracle  15386    1  0 10:53 ?        00:00:00 ora_lreg_db12c

oracle  15388    1  0 10:53 ?        00:00:03 ora_mmon_db12c

oracle  15390    1  0 10:53 ?        00:00:00 ora_mmnl_db12c

oracle  15392    1  0 10:53 ?        00:00:00 ora_d000_db12c

oracle  15394    1  010:53 ?        00:00:00 ora_s000_db12c

oracle  15407    1  0 10:54 ?        00:00:00 ora_tmon_db12c

oracle  15409    1  0 10:54 ?        00:00:00 ora_tt00_db12c

oracle  15411    1  0 10:54 ?        00:00:00 ora_smco_db12c

oracle  15413    1  0 10:54 ?        00:00:00 ora_fbda_db12c

oracle  15415    1  0 10:54 ?        00:00:00 ora_aqpc_db12c

oracle  15419    1  0 10:54 ?        00:00:00 ora_p000_db12c

oracle  15421    1  0 10:54 ?        00:00:00 ora_p001_db12c

oracle  15423    1  0 10:54 ?        00:00:00 ora_p002_db12c

oracle  15425    1  0 10:54 ?        00:00:00 ora_p003_db12c

oracle  15435    1  0 10:54 ?        00:00:00 ora_cjq0_db12c

oracle  15459    1  0 10:54 ?        00:00:00 ora_qm02_db12c

oracle  15463    1  0 10:54 ?        00:00:00 ora_q002_db12c

oracle  15465    1  0 10:54 ?        00:00:00 ora_q003_db12c

oracle  15612    1  0 11:04 ?        00:00:00 ora_w000_db12c

oracle  15679    1  0 11:10 ?        00:00:00 ora_j000_db12c

oracle  15681    1  0 11:10 ?        00:00:00 ora_j001_db12c

oracle  15683    1  0 11:10 ?        00:00:00 ora_w001_db12c

$

即使在多进程模型中,某些个别进程内部运行在多线程模式。

相反,在 windows 系统上,Oracle 数据库作为一个多线程进程运行,而每个 UNIX/Linux 下的进程作为一个或多个线程运行。Oracle12c 可以在 UNIX/Linux 上运行在多线程模式下,就像运行在 window 上那样。

2.  THREADED_EXECUTION 参数

线程模型通过初始化参数 THREADED_EXECUTION 指定。

1)  THREADED_EXECUTION=FALSE:为默认值,oracle 运行在多进程模式下。

2)  THREADED_EXECUTION=TRUE: Oracle 以多线程模式运行。

如果想切换到多线程模式,只需设置 THREADED_EXECUTION 参数并重启数据库就可以。

CONN sys AS SYSDBA

ALTER SYSTEM SET threaded_execution=TRUESCOPE=SPFILE;

SHUTDOWN IMMEDIATE;

STARTUP;

一旦数据库被重启,我们会发现操作系统进程数减少了很多。

$ ps -ef | grep [o]ra_

oracle  15839    1  0 11:26 ?        00:00:00 ora_pmon_db12c

oracle  15841    1  0 11:26 ?        00:00:00 ora_psp0_db12c

oracle  15843    1  8 11:26 ?        00:00:03 ora_vktm_db12c

oracle  15847    1  0 11:26 ?        00:00:00 ora_u004_db12c

oracle  15853    1 34 11:26 ?        00:00:13 ora_u005_db12c

oracle  15859    1  0 11:26 ?        00:00:00 ora_dbw0_db12c

$

另外,需将如下参数添加至 ”$ORACLE_HOME/network/admin/listener.ora” 文件中,以允许产生新线程来支持监听产生的连接,记得要用正确监听名替换

DEDICATED_THROUGH_BROKER_=ON

当需要切换回多进程模型时,只需切换该初始化参数值并重启数据库。

CONN sys AS SYSDBA

ALTER SYSTEM SET threaded_execution=FALSESCOPE=SPFILE;

SHUTDOWN IMMEDIATE;

STARTUP;

记得清楚 ”listener.ora” 文件中的参数。

3.  OS 认证

多线程模型不支持 OS 认证,这是一个特点而不是 bug。看前面的例子,使用线程模型时,通过 ”SYS ASSYSDBA” 而不是 “/ AS SYSDBA” 连接数据库。试着以 OS 认证连接库会报错。

$ sqlplus / as sysdba

 

SQL*Plus: Release 12.1.0.1.0 Production onThu Jul 4 11:28:16 2013

 

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

 

ERROR:

ORA-01017: invalid username/password;logon denied

 

 

Enter user-name: sys as sysdba

Enter password:

 

Connected to:

Oracle Database 12c Enterprise EditionRelease 12.1.0.1.0 – 64bit Production

With the Partitioning, OLAP, AdvancedAnalytics and Real Application Testing options

 

SQL>

文档上说会报错 ORA-01031 “insufficientprivileges”。

4.  杀会话

视图 V$PROCESS 包括一个叫 STID 的新列,该列显示会话的线程 ID。

SET LINESIZE 140

COLUMN username FORMAT A15

COLUMN oSUSEr FORMAT A15

COLUMN spid FORMAT A10

COLUMN stid FORMAT A10

 

SELECT s.username,

      s.osuser,

      s.sid,

      s.serial#,

      p.spid,

      p.stid,

      s.status

FROM  v$session s,

      v$process p

WHERE s.paddr = p.addr

AND  s.username IS NOT NULL

ORDER BY s.username, s.osuser;

 

USERNAME        OSUSER                SID    SERIAL# SPID      STID      STATUS

————— ————— ——————– ———- ———- ——–

SYS            oracle                  35          3 18844      18901    ACTIVE

TEST            oracle                  40        37 18844      19020    INACTIVE

 

SQL>

在 Oracle 内杀会话的方法没变,因为你还是可以找到 SID 和 SERIAL#。

SQL> ALTER SYSTEM KILL SESSION ‘40,37’;

 

System altered.

 

SQL>

但一定不要用 UNIX/Linux 命令杀掉会话进程(SPID)对应的 OS 进程,否则,我们会杀掉多个会话,而不是我们真正想杀的会话。

$ ps -ef | grep 18844 | grep -v grep

oracle  18844    1  1 16:27 ?        00:00:22 ora_u005_db12c

$

5.  总结

1)  使用该特点的唯一可信理由是将多个实例集成到一个服务器上,同时,没用多宿主数据库选项。因为,如果不用多线程模型,OS 进程数将会很高。

2)  如果你的硬件架构相对进程而言,更适合处理线程,那么,该特点也许会带来一些好处。

3)  RAC 环境中,各节点必须都用同样的线程模型。

更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-01/140024.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计4403字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中