【转】Oracle数据库提高命中率及相关优化
关于Oracle中各个命中率的计算以及相关的调优
1)Library Cache的命中率:
.计算公式:Library Cache Hit Ratio = sum(pinhits) / sum(pins)
- SQL>SELECT SUM(pinhits)/sum(pins)
- FROM V$LIBRARYCACHE;
通常在98%以上,否则,需要要考虑加大共享池,绑定变量,修改cursor_sharing等参数。
阅读全文…
关于Oracle中各个命中率的计算以及相关的调优
1)Library Cache的命中率:
.计算公式:Library Cache Hit Ratio = sum(pinhits) / sum(pins)
- SQL>SELECT SUM(pinhits)/sum(pins)
- FROM V$LIBRARYCACHE;
通常在98%以上,否则,需要要考虑加大共享池,绑定变量,修改cursor_sharing等参数。
阅读全文…
Oracle性能优化基本方法包括一下几个步骤,包括:
1)设立合理的Oracle性能优化目标。
2)测量并记录当前的Oracle性能。
3)确定当前Oracle性能瓶颈(Oracle等待什么、哪些SQL语句是该等待事件的成分)。
4)把等待事件记入跟踪文件。
5)确定当前的OS瓶颈。
6)优化所需的成分(应用程序、数据库、I/O、争用、OS等)。
7)跟踪并实施更改控制过程。
8)测量并记录当前性能
9)重复步骤3到7,直到满足优化目标
下面来一一详述。
阅读全文…
当你用gcc编译cpp文件时会出现undefined reference to `__gxx_personality_v0′的错误
解决方法是:
1,把cpp改名为.c如果你写的是c代码
2,如果你是c++代码,那么请使用g++
参见:http://heyunhuan513.blog.163.com/blog/static/16020422009923992100/
转载自:http://blog.csdn.net/wuhuiran/archive/2007/12/01/1910126.aspx
1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用
closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:
BOOL bReuseaddr=TRUE;
setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));
2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历
TIME_WAIT的过程:
BOOL bDontLinger = FALSE;
setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL));
#include <unistd .h> int get_bin_pathname( char *pathname ) { FILE *fp = NULL; char _filename[1024] = {0}; int _pid = getpid(); sprintf(_filename, "dirname `ls -n /proc/%d/exe | awk '{if ($8==\"->\") {print $19} else {if ($9==\"->\") {print $10} else {print $11}}}'`", _pid); fp = popen(_filename, "r"); fgets(_filename, sizeof(_filename), fp); fclose(fp); _filename[strlen(_filename)-1] = '\0'; strcpy( pathname, _filename ); return 0; } </unistd>
果然是缩进的问题
参见[http://www.cnblogs.com/dczsf/archive/2009/03/06/1404515.html]
郁闷了一会儿,我本来想定义一个类对象的成员变量,结果出现了这样的问题,我还以为是语法错误呢
Python中分类的成员变量和对象的成员变量
类的成员变量和C++中的静态成员变量相同,由该类的所有对象(实例)共享。
对象的成员变量和C++中的普通成员变量相同,由对象(实例)独享
阅读全文…
启程输入法的作者有一篇文章,介绍了输入法编程编码的入门知识,并提供了一个输入法程序框架源代码,强烈推荐[http://www.setoutsoft.cn/Html/?256.html]
IME是什么?IME是在Windows平台上使用的标准的输入法接口规范。
编写输入法程序(非外挂式)就是实现指定的接口并在DLL中到处这些接口函数供系统调用。
以下为接口函数名称及描述,原型及实现请参照启程输入法作者提供的源代码
阅读全文…
在编译程序的时候可以使用-D来定义一个宏开关-Dmacro,等同于C中的#define macro
或者定义一个变量,-Dmacro=1,等同于C中的#define macro 1,不过请注意,变量的值只能是数字,不能是字符串
不过对我来说数字就够用了,哈哈
因为最近我重新设计以前的系统,不同的模块连接不同的数据库,我不想在代码中硬编码指定一个数据库连接,总之需求比较特殊,因为是维护以前的系统,也不能全部重新编码,哈哈,有了这个发现我就可以省下很多力气了
以前发表在CSDN Blog中的,今天用到转发此地。
http://blog.csdn.net/wuhuiran/archive/2008/05/10/2427419.aspx
一,vc6.0版本
‘——————————————————————————
‘FILE DESCRIPTION: New Macro File
‘——————————————————————————
Sub filedescmacros()
‘DESCRIPTION: A description was not provided.
‘Begin Recording
ActiveDocument.Selection = "/"
ActiveDocument.Selection = "******************************************************************"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "*"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "* Copyright (c) 2008, xxxxx有限公司"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "* All rights reserved."
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "*"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "* 文件名称:" + ActiveDocument.Name
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "* 摘 要: "
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "*"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "* 当前版本:1.0"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "* 作 者:吴会然"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "* 完成日期:" + CStr(Date())
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "*"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "* 取代版本:"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "* 原 作者:"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "* 完成日期:"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "*"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "*"
ActiveDocument.Selection = "*****************************************************************/"
ActiveDocument.Selection.LineUp dsMove, 10
‘End Recording
End Sub
我的初衷是这样的,有一个so1模块实现数据库连接池的管理,其他业务实现so2中需要用到连接池so1,又因为连接池只能有一个,所以连接池在进程Bin1中创建并管理,在so2中获取连接池,实际上就是Bin1中调用so1创建的连接池,哈哈,我的问题解决了。
我的想法是,因为在进程Bin1的一个业务中,会用到多个数据库的连接(多个不同的数据库呃),那么Bin1中创建一个session(session的代码中so1中),用当前线程id作为session的标识,在so2中的业务代码中根据线程id获取到session信息,需要获取什么类型的数据库连接由so2的具体业务确定,获取到连接之后注册到当前session,这样当业务取消或失败的时候,可以统一的abort数据库操作。
测试代码很简单,在dll1.so中是一个单例模式的类
在bin1中创建单例对象,并执行一个增加int的函数
dll2.so中只有一个函数,获取单例并返回一个int值
从结果我们可以发现,实际上dll2.so中使用的单例对象就是bin1中创建的单例对象
测试代码:下载