Oracle12c(12.1)中性能优化&功能增强之通过参数THREADED_EXECTION使用多线程模型
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)中性能优化&功能增强之通过参数THREADED_EXECTION使用多线程模型的更多相关文章
- Oracle12c中性能优化&功能增强新特性之重大突破——内存列存储新特性
内存列存储(IM column store) 是Oracle12.1.0.2版本的主要特点.该特点允许列,表,分区和物化视图在内存中以列格式存储,而不是通常的行格式.数据存在内存中的好处显而易见,而列 ...
- Oracle12c中性能优化&功能增强新特性之临时undo
临时表最有意思的特点之一是undo段也存储在常规undo表空间中,而它们的undo反过来被redo保护,这会导致一些问题. 1) 写undo表空间需要数据库以读写模式打开,因此,只读数据库和物理备库 ...
- Oracle12c中性能优化&功能增强新特性之全局索引DROP和TRUNCATE 分区的异步维护
Oracle 12c中,通过延迟相关索引的维护可以优化某些DROP和TRUNCATE分区命令的性能,同时,保持全局索引为有效. 1. 设置 下面的例子演示带全局索引的表创建和加载数据的过程. -- ...
- 【公开课】【阿里在线技术峰会】何登成:AliSQL性能优化与功能突破的演进之路
MySQL的公开课,可能目前用不上这些,但是往往能在以后想解决方案的时候帮助到我.以下是阿里对公开课的整理 摘要: 本文根据阿里高级数据库专家何登成在首届阿里巴巴在线技术峰会上的分享整理而成.他主要介 ...
- Oracle12c中性能优化新特性之新增APPROX_COUNT_DISTINCT 快速唯一值计数函数
Oracle11g中,为了改善DBMS_STATS包收集统计信息时的唯一值计数功能,增加了 APPROX_COUNT_DISTINCT函数,但文档中未记载.Oracle12c文档中包括了该函数,因此, ...
- Java中性能优化的45个细节
在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时 ...
- Oracle12c中性能优化增强新特性之数据库智能闪存
智能闪存功能最初在XD中引入.从Oracle11.2.0.2开始,除了用于XD存储,还可用于任何闪盘.Oracle12c中,不需卷管理器就可以使用闪盘. 1. 简介 智能闪存在solaris和lin ...
- Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector
那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测功能,我们可以使用第三方工具Visual Leak Detector(以下简 ...
- Cocos开发中性能优化工具介绍之使用Windows任务管理器
说到Windows平台,我们很快就想到了Visual Studio 2012,然而Visual Studio 2012在这方面没有很好的工具.如果我们只是想知道大体上内存.CPU等在某一事件前后变化情 ...
随机推荐
- Android应用打破65K方法数限制
近日,Android Developers在Google+上宣布了新的Multidex支持库,为方法总数超过65K的Android应用提供了官方支持.如果你是一名幸运的Android应用开发者,正在开 ...
- [cacti]nginx+php+cacti+mysql+php-fpm 安装小记
网上教程很多,但是nginx不太多,下面安装时候主要参考的篇文章: http://54im.com/linux/linux-cacti-cn-install.html http://www.tecmi ...
- 剑指Offer——回溯算法
剑指Offer--回溯算法 什么是回溯法 回溯法实际是穷举算法,按问题某种变化趋势穷举下去,如某状态的变化用完还没有得到最优解,则返回上一种状态继续穷举.回溯法有"通用的解题法"之 ...
- Quick-Cocos2d-X 捋一捋框架流程
猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=535 一直比较关注Quick L ...
- 关于bootstrap-fileinput
最近搞了一个很简单的项目,里面需要文件上传.当然文件上传也是很简单的,不过做出成品之后发现,卧槽,火狐和谷歌两个浏览器显示的内容不一致. 如下图,左边的是谷歌显示,右边是火狐显示. 其实,作为一个后台 ...
- Ubuntu15.10下如何使用EasyGui模块开发Python GUI
偶然的一个机会,发现了github上的这个开源的项目,easygui for python(一个基于TKinter的模块) 感觉很是惊讶,原来python也可以这么简单的开发出一些GUI界面(究其原因 ...
- UNIX网络编程——套接字选项(心跳检测、绑定地址复用)
/* 设置套接字选项周期性消息检测连通性 心跳包. 心博.主要用于长连接. * 参数:套接字, 1或0开启, 首次间隔时间, 两次间隔时间, 断开次数 */ void setKeepAlive( in ...
- Install and run DB Query Analyzer 6.04 on Microsoft Windows 10
Install and run DB Query Analyzer 6.04 on Microsoft Windows 10 DB Query Analyzer is presented ...
- Java数组排序基础算法,二维数组,排序时间计算,随机数产生
import java.util.Arrays; //包含Arrays import java.util.Random; public class HelloWorld { public static ...
- Leetcode_83_Remove Duplicates from Sorted List
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41728739 Given a sorted linked ...