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"文件中,以允许产生新线程来支持监听产生的连接,记得要用正确监听名替换<listener-name>

DEDICATED_THROUGH_BROKER_<listener-name>=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环境中,各节点必须都用同样的线程模型。

Oracle12c(12.1)中性能优化&amp;功能增强之通过参数THREADED_EXECTION使用多线程模型的更多相关文章

  1. Oracle12c中性能优化&amp;功能增强新特性之重大突破——内存列存储新特性

    内存列存储(IM column store) 是Oracle12.1.0.2版本的主要特点.该特点允许列,表,分区和物化视图在内存中以列格式存储,而不是通常的行格式.数据存在内存中的好处显而易见,而列 ...

  2. Oracle12c中性能优化&amp;功能增强新特性之临时undo

    临时表最有意思的特点之一是undo段也存储在常规undo表空间中,而它们的undo反过来被redo保护,这会导致一些问题. 1)  写undo表空间需要数据库以读写模式打开,因此,只读数据库和物理备库 ...

  3. Oracle12c中性能优化&amp;功能增强新特性之全局索引DROP和TRUNCATE 分区的异步维护

    Oracle 12c中,通过延迟相关索引的维护可以优化某些DROP和TRUNCATE分区命令的性能,同时,保持全局索引为有效. 1.   设置 下面的例子演示带全局索引的表创建和加载数据的过程. -- ...

  4. 【公开课】【阿里在线技术峰会】何登成:AliSQL性能优化与功能突破的演进之路

    MySQL的公开课,可能目前用不上这些,但是往往能在以后想解决方案的时候帮助到我.以下是阿里对公开课的整理 摘要: 本文根据阿里高级数据库专家何登成在首届阿里巴巴在线技术峰会上的分享整理而成.他主要介 ...

  5. Oracle12c中性能优化新特性之新增APPROX_COUNT_DISTINCT 快速唯一值计数函数

    Oracle11g中,为了改善DBMS_STATS包收集统计信息时的唯一值计数功能,增加了 APPROX_COUNT_DISTINCT函数,但文档中未记载.Oracle12c文档中包括了该函数,因此, ...

  6. Java中性能优化的45个细节

    在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时 ...

  7. Oracle12c中性能优化增强新特性之数据库智能闪存

    智能闪存功能最初在XD中引入.从Oracle11.2.0.2开始,除了用于XD存储,还可用于任何闪盘.Oracle12c中,不需卷管理器就可以使用闪盘. 1.  简介 智能闪存在solaris和lin ...

  8. Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector

    那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测功能,我们可以使用第三方工具Visual Leak Detector(以下简 ...

  9. Cocos开发中性能优化工具介绍之使用Windows任务管理器

    说到Windows平台,我们很快就想到了Visual Studio 2012,然而Visual Studio 2012在这方面没有很好的工具.如果我们只是想知道大体上内存.CPU等在某一事件前后变化情 ...

随机推荐

  1. Android 增量更新和升级

    在年初的时候,尝试了一把热修复技术,当时选择的是阿里的andfix,使用起来也很简单,这里就不在多少,如果你对andfix有兴趣请链接:点击打开链接.虽然网上将热修复的文章很多,不过我还是想说原理,然 ...

  2. 电脑hash破解

    我一直在想,到底用什么样的方式才能较长时间地控制已经得到了权限的目标呢?留后门,种木马,甚至是Rootkit?留的Webshell痕迹太明显,哪怕是一句话的Webshell,都极容易被管理员清除.放了 ...

  3. 17 一个ContentProvider的例子

    服务端(ContentProvider) 目录结构图: MainActivity.java: package com.qf.day17_contentprovider_words_demo2; imp ...

  4. UNIX网络编程——UDP回射服务器程序(初级版本)以及漏洞分析

    该函数提供的是一个迭代服务器,而不是像TCP服务器那样可以提供一个并发服务器.其中没有对fork的调用,因此单个服务器进程就得处理所有客户.一般来说,大多数TCP服务器是并发的,而大多数UDP服务器是 ...

  5. Android开发学习之路--Notification之初体验

    一般当我们收到短信啊,微信啊,或者有些app的提醒,我们都会在通知栏收到一天简单的消息,然后点击消息进入到app里面,其实android中有专门的Notification的类可以完成这个工作,这里就实 ...

  6. JQuery纵向下拉菜单实现心得

    jquery库给我们带来了许多便利,不愧是轻量级的DOM框架,在前面的博文中小编分别对jquery的基础知识以及jquery的一些小demo有一系列的简单介绍,期待各位小伙伴的指导.使用jquery实 ...

  7. 【Unity Shaders】Mobile Shader Adjustment—— 什么是高效的Shader

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  8. MySQL数据库安装与配置详解(图文)

    接下来看一下如何安装mysql数据库. 由于有更详细的教程资源,因此参考别人的文章以整理.安装教程参考自博客园文章http://www.cnblogs.com/sshoub/p/4321640.htm ...

  9. Android 官方命令深入分析之android

    作者:宋志辉 android命令是一个非常重要的开发工具,它可以: 创建.删除和查看Android Virtual Devices(AVDs). 创建和更新android项目. 更新你的android ...

  10. [leetcode]经典算法题- String to Integer (atoi)

    题目描述: 把字符串转化为整数值 原文描述: Implement atoi to convert a string to an integer. Hint: Carefully consider al ...