仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 610|回复: 7
打印 上一主题 下一主题

[学习教程] 使用WaitFor Delay下降批量数据处置时服务器的CPU利用率

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:18:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
操作被同步到从库上后,则主从都“回天无力”。update语句与delete语句与insert语句最年夜的分歧在于:一般利用insert语句时都是单条拔出,但update与delete则分歧,组合where前提,我能够批量操纵数据库中的数据。

在开辟中,我们只管不要一条一条往实行修正与删除语句,固然,条件是指你必要删除批量数据的时分而你又利用轮回实行单条删除的办法,由于如许做的效力会很低,实行工夫会很长。可是,假如我们一条操纵的数据量过量,又会形成数据库服务器的CPU利用率太高,假如现在有效户在利用数据库,一定会影响用户的操纵。以是,我们能够依据用户的详细情形来决意操纵体例:

1,假如是在非事情时段,则应当尽量地在一条语句中更新大概删除数据。这是完成操纵的最快办法,固然会形成数据库服务器CPU利用率太高,但由于此时没有效户在会见数据库,以是不会形成不良影响。

2,假如是在事情时段,则应当依据实践情形将update与delete语句拆分红多句来实行,每实行一段歇息一段工夫,如许固然实行工夫长了,但不会影响用户的操纵。

上面,我们就来说讲怎样让sql语句实行一段就歇息一会再实行的办法:

使用WAITFOR语句:
感化:
在到达指准时间或工夫距离之前,大概指定语句最少修正或前往一行之前,制止实行批处置、存储历程或事件。

语法:
WAITFOR
{
DELAYtime_to_pass
|TIMEtime_to_execute
|(receive_statement)[,TIMEOUTtimeout]
}

示例:
updatetable1setamout=amout*1.1whereid<200
waitfordelay00:00:00:100
updatetable1setamout=amout*1.1whereid>=200andid<=500
waitfordelay00:00:00:100
updatetable1setamout=amout*1.1whereid>500

如许,我们就把原本应当是
updatetable1setamout=amout*1.1
的语句分红了三段来实行,每实行一段,就歇息100毫秒(两头的歇息工夫应当依据分歧的服务器来设置,我们应当在测试情况中屡次测试,以算出最好歇息工夫),如许,数据库服务器的CPU利用率能够失掉分明下落。

注重:
1,实行WAITFOR语句时,该事件会处于运转形态,其他哀求不克不及在统一事件下运转。
2,WAITFOR会制止事件的处置,以是在统一事件中一切实行城市等WAITFOR实行完成才会前往了局,如:
select1
WaitForDelay00:00:05:000
select2

事件会在5秒后同时打印出1与2,而不是先打印1,守候5秒后再打印出2有了数据以后,我们就要想一个比较统一的方法来闪回。上面我们说了对于DML操作,可以通过反向执行所有逆操作来实现,对于语句里面的DDL,只能直接跳过。原因是一个DDL不一定有直接的逆操作。
谁可相欹 该用户已被删除
沙发
发表于 2015-1-18 12:43:25 | 只看该作者
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
简单生活 该用户已被删除
板凳
 楼主| 发表于 2015-1-25 21:47:12 | 只看该作者
不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理?
地板
发表于 2015-2-4 07:55:16 | 只看该作者
其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!
第二个灵魂 该用户已被删除
5#
发表于 2015-2-27 19:03:59 | 只看该作者
从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。
小女巫 该用户已被删除
6#
发表于 2015-3-9 12:40:00 | 只看该作者
其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!
小妖女 该用户已被删除
7#
发表于 2015-3-16 23:55:13 | 只看该作者
having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
冷月葬花魂 该用户已被删除
8#
发表于 2015-3-23 08:19:30 | 只看该作者
我们学到了什么?思考问题的时候从表的角度来思考问
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表