@woshichuanqilz
2015-12-10T05:17:48.000000Z
字数 1670
阅读 1917
SQL
问题语句:
SELECT @EnjoinLogon=EnjoinLogon FROM ConfineMachine(NOLOCK) WHERE MachineSerial=@strMachineID AND GETDATE()<EnjoinOverDate
处理方案:
- [运行数据库只是部署在Local之上]
- [测试结果:去掉Link Server之后时间消耗是之前的十分之一还少]
- 涉及知识点 Linked Server 描述 , sp_addlinkedserver
[注] 红框1,2 都是同样的情况不再赘述
问题语句:
IF ((@insertedScore-@deletedScore)<>0 or (@insertedInsure-@deletedInsure<>0)) and (@dwUserID not in (SELECT UserID FROM QPAccountsDB.dbo.AccountsInfo WHERE IsAndroid=1 )) -- Profiler 中截取
处理方案:
- Link: Inserted and Deleted
_文章关键参考_SQL服务器自动创建并管理这些表(inserted, deleted)
- Link: 数据库性能优化之SQL语句优化
_文章关键参考_NOT IN操作符 此操作是强列不推荐使用的,因为它不能应用表的索引。推荐方案:用NOT EXISTS 方案代替
解决法案: 阻止SQL SERVER内部的自动添加表的处理, 不确定可行性, 需要继续深入。
问题语句:
UPDATE GameScoreInfo SET Score=Score+@VariationScore, InsureScore=InsureScore+@VariationInsure, Revenue=Revenue+@InsureRevenue
问题分析:
- 对比本地的profiler执行结果和server的执行结果(Pic1, Pic2), 发现同样的数据库在Server上引起了80000+的Reads
(*Reads: 由服务器代表事件读取逻辑磁盘的次数*)
- 以及观察SQL SERVER中的执行计划(下图)。未发现异常的情况,
[本地]
![]()
[Server]
- 参考信息: SQL profiler 2008 "Reads" column
所以, 推断问题的主要原因是高并发, 也许还有硬件的问题。
处理方案:
- 见下文对Latch_Ex(独占锁的分析).
问题分析:
- 对比两幅图发现, 我们的Latch_Ex(独占锁)一项过高, 一般在十五名左右正常。
- Wait_Statictis介绍以及图片来源
- 针对Latch_XX的解释: Advanced performance troubleshooting: waits, latches, spinlocks
可以尝试的解决方案(尚未完成)
- Microsoft 查询慢问题的优化清单
- 查询分析
- 分表操作
- 采用分布式部署数据库