论文部分内容阅读
摘 要: 数据库性能预测具有可利用历史数据较少、受外界不确定性因素影响较大的特点。传统的构建数据库方法有采集数据周期长、普通人较难准确掌握、预测值波动性大等问题。为此探讨了一种应用数学公式,只需采集较少数据即可方便快速地预测数据库性能。使用该方法可以在数据库处于正常工作情况下,对今后一段时期内数据库性能做出较为快速准确的预测,有效预防未来可能出现的性能问题。
关键词: 数据库; 性能; 预测; 公式
中图分类号:TP392 文献标志码:A 文章编号:1006-8228(2015)06-01-03
Abstract: Database performance prediction has the characteristics of less available historical data and great affect of the external uncertain factors. The traditional method of building a database has the problems which data collection cycle is long, ordinary people are difficult to grasp, predictive value is volatile ect. This paper introduces an applied mathematics formula, database performance can be predicted rapidly as long as few data is collected. Thus a more accurate prediction of the database performance during the next period of time is made, that effectively prevents the possible performance problems in the future.
Key words: database; performance; prediction; formula
0 引言
随着信息技术的飞速发展,数据库已经被应用到社会的各个领域,数据库的性能是数据库运行好坏的一个重要技术指标。数据库系统是动态的,含有各种各样的事务类型,这使得对数据库作出准确的性能预测非常困难。许多IT专业人员(DBA、项目经理、系统集成或开发人员)在工作中都会碰到需要预测数据库性能的情况。
本文以笔者单位正在使用的业务数据库系统为研究对象,应用数学预测公式在系统运行性能数据的分析基础上,对该业务系统数据库的性能趋势作出预测。根据预测结果,科学合理的添加系统资源,满足了系统稳定高效运行的需要,化解了数据库性能风险,避免了不必要的浪费。
1 相关知识
1.1 事务
在预测性能时,我们需要一个基本工作单元来沟通和计算。我们把这种基本工作单元称作事务。在数据库领域对事务有各种各样的定义,为了叙事清楚,我们把事务定义为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全不执行。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。
1.2 到达率
事务不仅是一种静态的定义,它们还是动态的。事务到达一个计算系统,就像人到达办公大楼电梯。我们将到达率定义为:在给定的时间内到达的事务的数量。我们用到达率来表示一定时间内事务的繁忙程度,在一个系统中,到达率越高,事务的活动就越多。
我们使用希腊字母λ表示到达率,其单位是某个时间内的工作数量,如每秒50个事务,写作50trx/s。
1.3 服务时间
当一个事务进入服务器后,CPU会立即开始处理这个事务,从开始处理这个事务到处理完这个事务所花费的时间,通常被称为服务时间并被标记为St。例如,如果一个事务占用150ms的CPU时间,其服务时间为St=150ms/trx。
1.4 队列
通常情况下,我们用繁忙度或者利用率来衡量服务器的忙碌程度。例如,如果一台服务器的繁忙时间占65%,那么其利用率为65%。当服务器有70%左右的时间处于繁忙状态时,它不能在事务到来后立即进行处理,这些事务将被放入到一个队列中一直保存到它被处理为止。
队列[2]是一种非常简单的数据结构。它本质上是一个包含一个头部和一个尾部的链表。事务被压入队列(入队)和弹出队列(出队)。本文论及到的队列模型是简单的先入/先出( FIFO)队列。
队列长度用来表示有多少积压的事务未被处理。当一个事务在队列中等待时,它等待Qt的时间。单位是每笔事务的时间。字母Q表示队列的长度,它的单位是简单的事务数量。
通常情况下,当一个服务器的繁忙率达到约70%时,就已经不能立即处理事务了,即使服务器还有30%是空闲的,当服务器变得越来越繁忙时,事务就会开始排队,队列长度会增加,而性能开始下降。
1.5 响应时间
当一个事务被提交时,它在整个计算系统中流动并消耗CPU、IO、内存和网络资源。有时事务无需在队列中等待,可以立即得到处理,有时它必须先在队列中等待。通常情况下,事务流在整个系统中,需多次地排队和被处理,直到它完成并退出系统。
在一个事务的生命周期内,如果我们将所有的服务时间和排队时间累加起来,就可以判断出事务在系统中花费的时间,这个时间通常被称为响应时间[6]。简单的说,响应时间就是服务时间加上排队时间:Rt=St+Qt。 在对数据库进行性能预测时,响应时间曲线是我们经常会用到的技术之一。
响应时间曲线如图1所示,纵轴是响应时间即事务完成所需要的时间,横轴是事务到达率即每单位时间进入系统的事务数。从图1可以看出,当事务到达率达到一定值时,响应时间呈几何级上升(出现拐点),这时系统将极为缓慢甚至不能工作,因此预测拐点何时在什么条件下会出现是我们预测工作的重点。
2 预测
2.1 数据收集
数据收集[5]是进行数据库性能预测的必备工作之一,收集到的原始数据还必须经过必要的转换才能成为对预测有用的数据。在进行数据收集时不能过于频繁,否则会对收集对象的性能产生负面影响。
在需要收集的数据中最重要的有两项,CPU使用率和数据库的工作负载,这里我们假设操作系统为UNIX,数据库为Oracle。在Oracle数据库中并没有工作负载这个性能指标字段,我们可以用Oracle内部统计信息“用户调用”(user call)来表示工作负载(即到达率)。
“user call”是一个随时间而增加的值,要得到工作负载数据,必须获取一个初始统计信息快照(S0)和结束统计信息快照(S1),将两者之差除以两次快照之间的时间(T)就可以得到其到达率(λ)。
2.3 使用公式进行预测
笔者单位某业务系统平时用于处理企业登记、变更和年检等业务,由于经济快速发展,企业数量不断增加,系统处理的业务量以每年40%的速度逐年递增,导致系统的负荷也不断加重。领导担心数据库系统会承受不住,因此需要对现有数据库系统做一次性能预测,并提供解决方案。
首先运行前文所提到的数据收集脚本,收集到数据库在正常情况下事务的平均到达率是6.11trx/s,CPU平均利用率是35%,CPU的数量是12,将这些数字代入基本预测公式:
假设CPU处理一个事物的服务时间St始终保持不变,得出当平均到达率为6.11trx/s时,每个事务的平均响应时间为0.69s,以此作为一个基线填入表2的第一行,然后每次将平均到达率增加20%代入公式,计算出平均响应时间如表2。
图1是根据表2得到的响应时间曲线图[3],横轴是到达率,纵轴是预测的响应时间。根据表2可以得知,当利用率在70-80%时,响应时间开始显著增加,这时到达率大约是13,这正是图形上开始进入曲线肘部的时刻。
我们根据图表预测的数据得到以下两点结论。
⑴ 当负载增加超过一倍时,系统的反应将变得缓慢。
⑵ 当负载增加接近两倍时,系统将变的几乎不可用。
根据以上结论,再结合业务量每年增加40%的事实,领导可以得知到第三年时系统会变得缓慢,到第四年时系统将变的几乎不可用。
2.4 应对措施效果预测
为了防止系统变慢,可以通过更换系统或添加CPU来解决,前者效果好但花费较大,后者节省费用但效果未知。此时可以利用预测公式[3]对添加CPU后的效果做出预测,为应对措施的选择给出理论上的依据。
该系统数据库服务器有16个插槽,已经使用了12个,还可以添加4个使CPU总数达到16,即M=16。
我们将原系统St=0.69,以及原系统开始变慢时的到达率λ=13.442代入公式可得:
U===0.579
Rt===0.690
我们发现当添加了4个CPU后,系统繁忙度从0.773下降到0.579,响应时间从0.723s下降到0.690s,系统没有变慢。
我们再把原系统变的不可用时的到达率λ=18.330代入上述公式可得系统繁忙度从1.054下降到0.790,响应时间从几乎无响应下降到0.706s,系统几乎没有变慢。
根据上述预测结果可以得知,该业务系统只需升级CPU就可以完全满足未来五年的业务发展需要。
2.5 实际效果
由于商事登记制度改革,新登记企业的数量呈现井喷式增长,原数据库系统提前一年达到了满负荷运行状态,系统繁忙度接近1,响应时间接近4秒。为了防止系统继续变慢,保障商事登记制度改革顺利推进,我们根据前期预测结果,为数据库添加了4个CPU。添加CPU后,再次对数据库系统进行跟踪测试,结果发现系统繁忙度下降到0.58,响应时间下降到0.6s,完全符合预测,顺利解决了数据库的瓶颈问题。
3 结束语
本文介绍了到达率、服务时间、响应时间等一些数据库性能预测的基本知识和概念[1],讨论了一些常用的预测公式并且就这些理论的具体运用进行了较详细的研究和论述。本文的研究结果在笔者单位的数据库系统上得到了成功应用,保障了数据库平稳运行,避免了盲目的升级替换,节约了宝贵的项目经费,实现了较好的经济和社会效益。
由于在数据库实际预测工作中经常会遇到样本采集数量不足、采集时间不平均或采集方式不对等因素干扰,造成数据库性能预测不准,因此,下一步考虑引进Erlang C公式来进一步加强数据库性能预测的准确性和抗干扰性。
参考文献:
[1] 陈虹.模型预测控制[M].科学出版社,2013.
[2] 席裕庚.预测控制(第2版)[M].国防工业出版社,2013.
[3] 李海翔.数据库查询优化器的艺术[M].机械工业出版社,2014.
[4] 李少远.全局工况系统预测控制及其应用[M].科学出版社,2008.
[5] 加西亚-莫利纳著,杨冬青等译.数据库系统实现[M].机械工业出版
社,2010.
[6] 博克斯著,王成璋等译.时间序列分析:预测与控制[M].机械工业出版
社,2011.
关键词: 数据库; 性能; 预测; 公式
中图分类号:TP392 文献标志码:A 文章编号:1006-8228(2015)06-01-03
Abstract: Database performance prediction has the characteristics of less available historical data and great affect of the external uncertain factors. The traditional method of building a database has the problems which data collection cycle is long, ordinary people are difficult to grasp, predictive value is volatile ect. This paper introduces an applied mathematics formula, database performance can be predicted rapidly as long as few data is collected. Thus a more accurate prediction of the database performance during the next period of time is made, that effectively prevents the possible performance problems in the future.
Key words: database; performance; prediction; formula
0 引言
随着信息技术的飞速发展,数据库已经被应用到社会的各个领域,数据库的性能是数据库运行好坏的一个重要技术指标。数据库系统是动态的,含有各种各样的事务类型,这使得对数据库作出准确的性能预测非常困难。许多IT专业人员(DBA、项目经理、系统集成或开发人员)在工作中都会碰到需要预测数据库性能的情况。
本文以笔者单位正在使用的业务数据库系统为研究对象,应用数学预测公式在系统运行性能数据的分析基础上,对该业务系统数据库的性能趋势作出预测。根据预测结果,科学合理的添加系统资源,满足了系统稳定高效运行的需要,化解了数据库性能风险,避免了不必要的浪费。
1 相关知识
1.1 事务
在预测性能时,我们需要一个基本工作单元来沟通和计算。我们把这种基本工作单元称作事务。在数据库领域对事务有各种各样的定义,为了叙事清楚,我们把事务定义为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全不执行。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。
1.2 到达率
事务不仅是一种静态的定义,它们还是动态的。事务到达一个计算系统,就像人到达办公大楼电梯。我们将到达率定义为:在给定的时间内到达的事务的数量。我们用到达率来表示一定时间内事务的繁忙程度,在一个系统中,到达率越高,事务的活动就越多。
我们使用希腊字母λ表示到达率,其单位是某个时间内的工作数量,如每秒50个事务,写作50trx/s。
1.3 服务时间
当一个事务进入服务器后,CPU会立即开始处理这个事务,从开始处理这个事务到处理完这个事务所花费的时间,通常被称为服务时间并被标记为St。例如,如果一个事务占用150ms的CPU时间,其服务时间为St=150ms/trx。
1.4 队列
通常情况下,我们用繁忙度或者利用率来衡量服务器的忙碌程度。例如,如果一台服务器的繁忙时间占65%,那么其利用率为65%。当服务器有70%左右的时间处于繁忙状态时,它不能在事务到来后立即进行处理,这些事务将被放入到一个队列中一直保存到它被处理为止。
队列[2]是一种非常简单的数据结构。它本质上是一个包含一个头部和一个尾部的链表。事务被压入队列(入队)和弹出队列(出队)。本文论及到的队列模型是简单的先入/先出( FIFO)队列。
队列长度用来表示有多少积压的事务未被处理。当一个事务在队列中等待时,它等待Qt的时间。单位是每笔事务的时间。字母Q表示队列的长度,它的单位是简单的事务数量。
通常情况下,当一个服务器的繁忙率达到约70%时,就已经不能立即处理事务了,即使服务器还有30%是空闲的,当服务器变得越来越繁忙时,事务就会开始排队,队列长度会增加,而性能开始下降。
1.5 响应时间
当一个事务被提交时,它在整个计算系统中流动并消耗CPU、IO、内存和网络资源。有时事务无需在队列中等待,可以立即得到处理,有时它必须先在队列中等待。通常情况下,事务流在整个系统中,需多次地排队和被处理,直到它完成并退出系统。
在一个事务的生命周期内,如果我们将所有的服务时间和排队时间累加起来,就可以判断出事务在系统中花费的时间,这个时间通常被称为响应时间[6]。简单的说,响应时间就是服务时间加上排队时间:Rt=St+Qt。 在对数据库进行性能预测时,响应时间曲线是我们经常会用到的技术之一。
响应时间曲线如图1所示,纵轴是响应时间即事务完成所需要的时间,横轴是事务到达率即每单位时间进入系统的事务数。从图1可以看出,当事务到达率达到一定值时,响应时间呈几何级上升(出现拐点),这时系统将极为缓慢甚至不能工作,因此预测拐点何时在什么条件下会出现是我们预测工作的重点。
2 预测
2.1 数据收集
数据收集[5]是进行数据库性能预测的必备工作之一,收集到的原始数据还必须经过必要的转换才能成为对预测有用的数据。在进行数据收集时不能过于频繁,否则会对收集对象的性能产生负面影响。
在需要收集的数据中最重要的有两项,CPU使用率和数据库的工作负载,这里我们假设操作系统为UNIX,数据库为Oracle。在Oracle数据库中并没有工作负载这个性能指标字段,我们可以用Oracle内部统计信息“用户调用”(user call)来表示工作负载(即到达率)。
“user call”是一个随时间而增加的值,要得到工作负载数据,必须获取一个初始统计信息快照(S0)和结束统计信息快照(S1),将两者之差除以两次快照之间的时间(T)就可以得到其到达率(λ)。
2.3 使用公式进行预测
笔者单位某业务系统平时用于处理企业登记、变更和年检等业务,由于经济快速发展,企业数量不断增加,系统处理的业务量以每年40%的速度逐年递增,导致系统的负荷也不断加重。领导担心数据库系统会承受不住,因此需要对现有数据库系统做一次性能预测,并提供解决方案。
首先运行前文所提到的数据收集脚本,收集到数据库在正常情况下事务的平均到达率是6.11trx/s,CPU平均利用率是35%,CPU的数量是12,将这些数字代入基本预测公式:
假设CPU处理一个事物的服务时间St始终保持不变,得出当平均到达率为6.11trx/s时,每个事务的平均响应时间为0.69s,以此作为一个基线填入表2的第一行,然后每次将平均到达率增加20%代入公式,计算出平均响应时间如表2。
图1是根据表2得到的响应时间曲线图[3],横轴是到达率,纵轴是预测的响应时间。根据表2可以得知,当利用率在70-80%时,响应时间开始显著增加,这时到达率大约是13,这正是图形上开始进入曲线肘部的时刻。
我们根据图表预测的数据得到以下两点结论。
⑴ 当负载增加超过一倍时,系统的反应将变得缓慢。
⑵ 当负载增加接近两倍时,系统将变的几乎不可用。
根据以上结论,再结合业务量每年增加40%的事实,领导可以得知到第三年时系统会变得缓慢,到第四年时系统将变的几乎不可用。
2.4 应对措施效果预测
为了防止系统变慢,可以通过更换系统或添加CPU来解决,前者效果好但花费较大,后者节省费用但效果未知。此时可以利用预测公式[3]对添加CPU后的效果做出预测,为应对措施的选择给出理论上的依据。
该系统数据库服务器有16个插槽,已经使用了12个,还可以添加4个使CPU总数达到16,即M=16。
我们将原系统St=0.69,以及原系统开始变慢时的到达率λ=13.442代入公式可得:
U===0.579
Rt===0.690
我们发现当添加了4个CPU后,系统繁忙度从0.773下降到0.579,响应时间从0.723s下降到0.690s,系统没有变慢。
我们再把原系统变的不可用时的到达率λ=18.330代入上述公式可得系统繁忙度从1.054下降到0.790,响应时间从几乎无响应下降到0.706s,系统几乎没有变慢。
根据上述预测结果可以得知,该业务系统只需升级CPU就可以完全满足未来五年的业务发展需要。
2.5 实际效果
由于商事登记制度改革,新登记企业的数量呈现井喷式增长,原数据库系统提前一年达到了满负荷运行状态,系统繁忙度接近1,响应时间接近4秒。为了防止系统继续变慢,保障商事登记制度改革顺利推进,我们根据前期预测结果,为数据库添加了4个CPU。添加CPU后,再次对数据库系统进行跟踪测试,结果发现系统繁忙度下降到0.58,响应时间下降到0.6s,完全符合预测,顺利解决了数据库的瓶颈问题。
3 结束语
本文介绍了到达率、服务时间、响应时间等一些数据库性能预测的基本知识和概念[1],讨论了一些常用的预测公式并且就这些理论的具体运用进行了较详细的研究和论述。本文的研究结果在笔者单位的数据库系统上得到了成功应用,保障了数据库平稳运行,避免了盲目的升级替换,节约了宝贵的项目经费,实现了较好的经济和社会效益。
由于在数据库实际预测工作中经常会遇到样本采集数量不足、采集时间不平均或采集方式不对等因素干扰,造成数据库性能预测不准,因此,下一步考虑引进Erlang C公式来进一步加强数据库性能预测的准确性和抗干扰性。
参考文献:
[1] 陈虹.模型预测控制[M].科学出版社,2013.
[2] 席裕庚.预测控制(第2版)[M].国防工业出版社,2013.
[3] 李海翔.数据库查询优化器的艺术[M].机械工业出版社,2014.
[4] 李少远.全局工况系统预测控制及其应用[M].科学出版社,2008.
[5] 加西亚-莫利纳著,杨冬青等译.数据库系统实现[M].机械工业出版
社,2010.
[6] 博克斯著,王成璋等译.时间序列分析:预测与控制[M].机械工业出版
社,2011.