求助DBA , 优化方案

zjlgigi 2009-03-17 05:10:39
各位DBA 和 高手,

小弟在开发和管理一个生产系统,现在遇到系统性能问题比较严重,主要体验在 : 用户的操作时程序反应极慢 .
环境 :
硬件 : DL580 (CPU X 2) 4GB 内存 300 G 硬盘
软件 : Windows 2003 + SQL2000 (sp4) + java ( 连接池 )


我的系统里面主要有一个比较‘巨型’的表: transaction , 这个表里面每天已 200000 条记录左右的数据量递增 .

transaction 表
物料号(material) , 数量(qty) , 区域(area) , 管理人员(user) ,日期(date) ....


目前已上百万条数据 ...


我的程序需要在这个表里“实时”求出数量QTY的和,但是每当求和的时候都会慢得要命,日积月累估计这种方式不行 .
select material,sum(qty) from transaction where area = 'xxxx'


问题 : 不知道有没有其它更好的解决办法 ???


还有我的程序里面每天都会有大量的数据插入操作,插入期间,SQL反应非常慢,CPU占用 90%以上,不知道有没有其它好的办法 ?谢谢 !!!

希望各位高手能给一点意见 。。。。谢谢 :)

...全文
191 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
BrainStorm_Chang 2009-03-18
  • 打赏
  • 举报
回复
up!!~
claro 2009-03-18
  • 打赏
  • 举报
回复
帮顶。
zzxap 2009-03-18
  • 打赏
  • 举报
回复
第一建立索引,上边很多人都提到了,建立合适的索引,提高检索性能。

還有你的機器太差了,建議升級服務器
zzxap 2009-03-18
  • 打赏
  • 举报
回复
select material,sum(qty) from transaction group by material where area = 'xxxx'

Q315054403 2009-03-18
  • 打赏
  • 举报
回复
每天20万的数据量说大也不是很大,很多工厂的数据都有这个量
偶可以帮手,不过我要收费<当然会等你效果改善之后>,QQ:315054403
orochi_gao 2009-03-18
  • 打赏
  • 举报
回复
只是2颗cpu,每天20万的数据增量,高负荷很正常。
另至于汇总反映慢,lz不妨把你的表结构发出来大家看看是否合理。
  • 打赏
  • 举报
回复
第一建立索引,上边很多人都提到了,建立合适的索引,提高检索性能。
第二:索引建立好了以后将where条件的数据先放到临时表,然后再进行sum求和。
shuiniu 2009-03-18
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zjlgigi 的回复:]
to shuiniu :

不好意思,我不太明白调整 qty 和 material 位置具体是指什么 ?
[/Quote]
就是调整qty和material的次序

--SQL2K
create index idx_test on [transaction] (area,material,qty)
--SQL2K5
create index idx_test on [transaction] (area,material) include(qty)

  • 打赏
  • 举报
回复
学习,up
kingdomxpxp 2009-03-18
  • 打赏
  • 举报
回复
UP+MARK
redfox241 2009-03-18
  • 打赏
  • 举报
回复
mark!!!
肥龙上天 2009-03-17
  • 打赏
  • 举报
回复
关注!
zjlgigi 2009-03-17
  • 打赏
  • 举报
回复
to shuiniu :

不好意思,我不太明白调整 qty 和 material 位置具体是指什么 ?
shuiniu 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 perfectaction 的回复:]
select material,sum(qty) from transaction where area = 'xxxx'  有索引吗?
比如:
SQL code
create index ix_01 on transaction (area,qty,material)


[/Quote]

调整一下qty和material的位置。
nzperfect 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zjlgigi 的回复:]
没有索引 ....

因为之前听人说过索引不可以乱建,建了反而会影响‘UPDATE’和‘INSERT’的操作。。。
谢谢
[/Quote]
适当的在频繁查询用的字段上加索引。

所有的DBA调优级,都需要监控,只有找到瓶颈才能应对解决.

moonshineidolon 2009-03-17
  • 打赏
  • 举报
回复
在Sql2000中 提供了 对表的纵向拆分

这个方案可以解决你的问题

大致的意思就是有同样结果的表若干个

插入数据是按照规则来进行插入对象的选择

这样就可以把你的大数据分配到各个表中

最后的查询是通过视图来完成的
zjlgigi 2009-03-17
  • 打赏
  • 举报
回复
To dawugui :

是的,我们每天的数据量有20万左右,如果按“表”来创建表,会不会操作起来不方便呢 ?

假如我需要跑一年的数据的汇总分析,我需要把多个表 union all 在一起 ....是吗 ?


Thanks .
zjlgigi 2009-03-17
  • 打赏
  • 举报
回复
没有索引 ....

因为之前听人说过索引不可以乱建,建了反而会影响‘UPDATE’和‘INSERT’的操作。。。
谢谢
zjlgigi 2009-03-17
  • 打赏
  • 举报
回复
thanks all .

transacactoin 表里的数据会经常改过的,即会 update , delete 的操作不会做 .
nzperfect 2009-03-17
  • 打赏
  • 举报
回复
抛开硬件层面不考虑的话:
1. windows 性能计数器 来监控下瓶颈在哪
2. sql profiler监控耗时的sql,然后优化
3. sp_who2 active 看下平时有没有阻塞
加载更多回复(5)

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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