请教数据库访问很慢怎么解决

chenyq2008 2015-06-12 04:03:57
最近维护一个网站,日访问量1W左右,PV在2W左右,数据库为sql2005,其中一个数据表有接近90万的记录,这个表字段有35个,建有9个索引。现在出现这样的问题,在网站正常连接数据时,在增删改操作这个表时都很慢(操作其他表正常,其他表数据少),时间可长达1分钟以上,在查询分析器insert into一条数据也是同样,估计不是程序代码问题。然而,关掉网站后,再在查询分析器中insert一条数据,则就很快,请大家帮忙问题一下,是否是数据查询拼发访问引致阻塞或死锁问题?但是网站访问量并不算高啊。求指点
...全文
1201 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
leeya66 2015-06-23
  • 打赏
  • 举报
回复
1分钟还是太夸张了,基本上没法用了,首先能否考虑增加硬件, 然后,查询时用脏读with (nolock) ,增删改时要上锁, 90万记录,按道理不算大,90万甚至不需要考虑分表, 肯定是哪里出问题了,
swordmanli 2015-06-23
  • 打赏
  • 举报
回复
我推测应该有3种可能性。 1、有不合理的簇索引,导致物理重新排序,但这种情况不是每次都慢,而是在触发重新排序时才会慢。 2、插入本身不慢,而是在插入完成后,有一些查询操作比较慢。这种可以用sqlserver性能跟踪工具进行跟踪。 2、本身不慢,而是被其他操作阻塞,这种情况就比较常见,这个需要排查,在保存过程中,你通过sqlserver的查询工具看看是不是有被阻塞的链接。具体可参照http://www.vidarsoft.com/devbook/sqlserver_1.html
缺了个觉 2015-06-20
  • 打赏
  • 举报
回复
索引太多。。。
zhaowei303 2015-06-19
  • 打赏
  • 举报
回复
可参考13楼办法
LongRui888 2015-06-15
  • 打赏
  • 举报
回复
引用 6 楼 chenyq2008 的回复:
[quote=引用 2 楼 yupeigu 的回复:] 索引那么多,insert速度肯定快不了,再加上 一定的并发量 ,速度肯定更慢了 。 如果把网站关掉,速度就快了,这也是肯定的,并发量下去了,就自然快了。
有什么解决办法不?不建索引,查询访问就会慢了[/quote] 但是一般也不需要9个索引吧,你要知道 每个索引 在哪些语句中可以用到,可以考虑 是否能合并索引,来减少索引。
canyuhuxi2012 2015-06-14
  • 打赏
  • 举报
回复
这个问题,要请教一下,十三兄弟
薛定谔的DBA 2015-06-13
  • 打赏
  • 举报
回复
估计是锁太多,各索引列相互是否有重复。下面俩语句不久执行看看,是否堵塞或者等待太多锁资源
select p.*,s.text from master.dbo.sysprocesses p cross apply sys.dm_exec_sql_text(p.sql_handle) s
where blocked > 0 or spid in(select blocked from master.dbo.sysprocesses where blocked > 0)
select CASE resource_type WHEN 'OBJECT' THEN OBJECT_NAME(resource_associated_entity_id) ELSE '' END AS [object]  
,resource_type,resource_description,request_mode,request_status,request_type  
from sys.dm_tran_locks where resource_database_id=DB_ID() and request_session_id<>@@SPID  
fengxiaohan211 2015-06-13
  • 打赏
  • 举报
回复
估计是有锁,按照楼上的各位建议先排查下吧
中国风 2015-06-13
  • 打赏
  • 举报
回复
表结构聚集索引是用GUID还是int 或datetime? ----- 查询时用脏读 删除、改--时最好用主健(唯一性列)作为条件,其它列时在该列建上索引 定时维护表的索引碎片,保持效率的查询 如果这个表历史数据不做变动时,可用每日搬动旧数据到历史表 或用分区表去处理,把各个分区放在不同的数据库文件组
xiaoxiangqing 2015-06-13
  • 打赏
  • 举报
回复
要查看一下慢是不是有锁定,看下执行计划,
chenyq2008 2015-06-13
  • 打赏
  • 举报
回复
引用 2 楼 yupeigu 的回复:
索引那么多,insert速度肯定快不了,再加上 一定的并发量 ,速度肯定更慢了 。 如果把网站关掉,速度就快了,这也是肯定的,并发量下去了,就自然快了。
有什么解决办法不?不建索引,查询访问就会慢了
chenyq2008 2015-06-13
  • 打赏
  • 举报
回复
引用 1 楼 shoppo0505 的回复:
应该是并发数太多,导致互相锁死的状态。 总体来说还是你的insert操作过慢导致,建议优化insert操作。
insert操作也就一条insert sql语句,应该没什么优化的吧
Q315054403 2015-06-13
  • 打赏
  • 举报
回复
阻塞。。跟是否聚集索引,是否9个索引的关系因素极微小
shoppo0505 2015-06-13
  • 打赏
  • 举报
回复
引用 5 楼 chenyq2008 的回复:
[quote=引用 1 楼 shoppo0505 的回复:] 应该是并发数太多,导致互相锁死的状态。 总体来说还是你的insert操作过慢导致,建议优化insert操作。
insert操作也就一条insert sql语句,应该没什么优化的吧[/quote] 看看聚集索引类型,并且插入的新数据是不是会根据聚集索引排序,这个会影响insert的操作时间的。
tcmakebest 2015-06-12
  • 打赏
  • 举报
回复
楼主查查是不是有聚簇索引,改成非聚簇索引吧,它会引起物理排序
hery2002 2015-06-12
  • 打赏
  • 举报
回复
去掉不必要的索引,90W的数据不算大, 在高并发情况下,事务尽量短小,避免死锁。 定期更新统计信息,加快查询速度
LongRui888 2015-06-12
  • 打赏
  • 举报
回复
索引那么多,insert速度肯定快不了,再加上 一定的并发量 ,速度肯定更慢了 。 如果把网站关掉,速度就快了,这也是肯定的,并发量下去了,就自然快了。
shoppo0505 2015-06-12
  • 打赏
  • 举报
回复
应该是并发数太多,导致互相锁死的状态。 总体来说还是你的insert操作过慢导致,建议优化insert操作。

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧