存档

2010年6月 的存档

我们都知道Latch是Oracle用来在内存中做串行控制的机构,从10g R2开始,Oracle引入了一个新的技术-Mutex。Mutex并不是Oracle的发明,而是系统提供的一个底层调用,Oracle只是利用它实现串行控制的功能,并替换部分Latch。
Mutex中有两个变量:分别是Holider identifer和Reference count,Holider identifer记录持有mutex的SID,而Reference count是一个计数,记录了当前正在以share方式访问mutex的数量,每当session以share方式持有mutex时,计数会加1,而释放时会减1。如果Reference count大于零,则表示该内存结构正在被Oracle pin住。
我们看一段伪代码,演示mutex的申请过程:
Function Mutex_get(mutex_name)
{
if mutex.holder:=SID
case mode:
‘exclusive’:
if mutex.ref_count=0
return TRUE
else
mutex.holder.clear;
[...]

6 17th, 2010 | Filed under 大话技术
标签: ,

最近一直在思考一个问题:如何为一个数据库建立性能模型?作为一名DBA来说,我们面临的一个巨大挑战是:如何保证数据库的性能可以满足快速变化的应用的需求,如何在数据量和访问量持续增长的情况下,保证应用的响应时间和数据库的负载处在合理的水平下。我们可能会经常面对以下的问题:某个SQL每秒要执行100次,响应时间是多少?某个应用发布后,对数据库的影响如何?所以,评估应用对数据库所产生的影响,优化应用并预测风险,保证数据库的可用性和稳定性,这是应用DBA真正有价值的地方。
响应时间为中心:
如果要选择一个评价系统优劣的性能指标,毫无疑问应该是响应时间。响应时间是客户体验的第一要素,所有的优化都应该为降低响应时间而努力。对于数据库系统也是如此,我们优化系统,优化SQL,最终目标都是为了降低响应时间,单位时间内可以处理更多的请求。
数据库时间模型:
响应时间一般分为服务时间(Service time)和等待时间(Wait time),服务时间指进程占用CPU的时间,包括前台进程(Server process)和后台进程(Backgroud process),我们一般只关注前台进程占用的CPU time。等待时间包括很多类型,一般最常见的是IO等待和并发等待,IO等待包括sequential read,scattered read和log file sync等等,而并发等待主要是latch和enqueue。SQL execute elapsed time指用户进程执行SQL的响应时间,包含CPU time和wait time。
以下是Oracle数据库的时间模型:

在Oracle系统中,我们可以利用AWR或Statspack报告,看到数据库的时间信息:

Statistic Name
Time (s)
% of DB Time

sql execute elapsed time
3,062.17
91.52

DB CPU
2,842.08
84.95

parse time elapsed
25.87
0.77

PL/SQL execution elapsed time
11.75
0.35

sequence load elapsed time
7.55
0.23

hard parse elapsed time
5.06
0.15

connection management call elapsed time
3.13
0.09

hard parse (sharing criteria) elapsed time
0.04
0.00

repeated bind elapsed time
0.01
0.00

PL/SQL compilation elapsed time
0.00
0.00

DB time
3,345.74

background elapsed time
204.91

background cpu [...]

6 16th, 2010 | Filed under 大话技术
标签:

建立数据库性能模型,这是我最近一直在思考的一个问题。这个命题还是非常有意义的,因为我们在很多情况下都需要对数据库做性能评估,容量规划和风险预测。很多DBA的优化经验都局限在一个很小的数据库技术领域内,而对整个系统的性能容量并不十分了解。我希望能够给大家一些简单的模型和经验数据,帮助大家对系统的整体性能有一个更深层次的了解。
这篇PPT可能还达不到模型的理论高度,甚至很多数据还不是十分准确,只是我个人思考的一个结果,希望能抛砖引玉,大家一起思考和进步。
PPT:Oracle数据库性能模型
–EOF–

6 13th, 2010 | Filed under 大话技术
标签:

之前,我对Sequential和Scattered的理解是Oracle读取IO的顺序不同,今天又讨论起这个问题,另外一种解释是两者在内存中的保存方式有差异,Sequential read在内存中是连续的,而Scattered read是离散的。以下解释来自于Oracle文档:
Scattered read:
This event signifies that the user process is reading buffers into the SGA buffer cache and is waiting for a physical I/O call to return. A db file scattered read issues a scatter-read to read the data into multiple discontinuous memory locations. A scattered read is usually a multiblock [...]

6 3rd, 2010 | Filed under 大话技术
标签: