【转】Oracle数据库提高命中率及相关优化

2010年4月23日 没有评论

关于Oracle中各个命中率的计算以及相关的调优

1)Library Cache的命中率:

.计算公式:Library Cache Hit Ratio = sum(pinhits) / sum(pins)

  1. SQL>SELECT SUM(pinhits)/sum(pins)
  2. FROM V$LIBRARYCACHE;

通常在98%以上,否则,需要要考虑加大共享池,绑定变量,修改cursor_sharing等参数。
阅读全文…

分类: 数据库 标签: , 120 views

【转】九大Oracle性能优化基本方法详解

2010年4月23日 没有评论

Oracle性能优化基本方法包括一下几个步骤,包括:

1)设立合理的Oracle性能优化目标。
2)测量并记录当前的Oracle性能。
3)确定当前Oracle性能瓶颈(Oracle等待什么、哪些SQL语句是该等待事件的成分)。
4)把等待事件记入跟踪文件。
5)确定当前的OS瓶颈。
6)优化所需的成分(应用程序、数据库、I/O、争用、OS等)。
7)跟踪并实施更改控制过程。
8)测量并记录当前性能
9)重复步骤3到7,直到满足优化目标

下面来一一详述。
阅读全文…

分类: 数据库 标签: , 135 views

[gcc]undefined reference to `__gxx_personality_v0′

2010年4月7日 1 条评论

当你用gcc编译cpp文件时会出现undefined reference to `__gxx_personality_v0′的错误

解决方法是:

1,把cpp改名为.c如果你写的是c代码

2,如果你是c++代码,那么请使用g++

参见:http://heyunhuan513.blog.163.com/blog/static/16020422009923992100/

分类: C/C++ 标签: 397 views

浅析:setsockopt()改善socket网络程序的健壮性

2010年3月31日 没有评论

转载自: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));

阅读全文…

分类: 网络编程 标签: , 355 views

linux下获取当前运行进程的文件路径

2010年3月29日 没有评论
#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>

阅读全文…

分类: C/C++ 标签: , 379 views

IndentationError: unindent does not match any outer indentation level

2010年3月24日 没有评论

果然是缩进的问题
参见[http://www.cnblogs.com/dczsf/archive/2009/03/06/1404515.html]
郁闷了一会儿,我本来想定义一个类对象的成员变量,结果出现了这样的问题,我还以为是语法错误呢

Python中分类的成员变量和对象的成员变量
类的成员变量和C++中的静态成员变量相同,由该类的所有对象(实例)共享。
对象的成员变量和C++中的普通成员变量相同,由对象(实例)独享
阅读全文…

分类: 编程技术 标签: 366 views

输入法编程学习笔记

2010年3月24日 没有评论

启程输入法的作者有一篇文章,介绍了输入法编程编码的入门知识,并提供了一个输入法程序框架源代码,强烈推荐[http://www.setoutsoft.cn/Html/?256.html]

IME是什么?IME是在Windows平台上使用的标准的输入法接口规范。
编写输入法程序(非外挂式)就是实现指定的接口并在DLL中到处这些接口函数供系统调用。
以下为接口函数名称及描述,原型及实现请参照启程输入法作者提供的源代码
阅读全文…

分类: 编程技术 标签: 339 views

GCC参数-D的使用

2010年3月22日 1 条评论

在编译程序的时候可以使用-D来定义一个宏开关-Dmacro,等同于C中的#define macro
或者定义一个变量,-Dmacro=1,等同于C中的#define macro 1,不过请注意,变量的值只能是数字,不能是字符串

不过对我来说数字就够用了,哈哈

因为最近我重新设计以前的系统,不同的模块连接不同的数据库,我不想在代码中硬编码指定一个数据库连接,总之需求比较特殊,因为是维护以前的系统,也不能全部重新编码,哈哈,有了这个发现我就可以省下很多力气了

分类: C/C++, 编程技术 标签: , 283 views

写注释的宏,vs6.0和vs2003两个版本的

2010年3月14日 没有评论

以前发表在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

阅读全文…

分类: 编程技术 标签: , 213 views

进程Bin1加载So1、So2,同时So2也加载So1,会有什么样的表现呢?

2010年3月14日 没有评论

我的初衷是这样的,有一个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中创建的单例对象

测试代码:下载

分类: C/C++ 标签: , , 174 views