锁定老帖子 主题:系统性能优化过程.
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-02-01
Lucas Lee 写道 hgq0011 写道 它是一个交收移交表,比如数据从A部门移到B部门,由从B部门移动到C部门,也就是,由一个上一部门,当前部门,下一部门;就成了一个树状结构了 照这么看,这个表应该不是树形结构吧,明显就是线型的,数据会同时移动到两个及以上的部门么(会有分叉么)? 一般来说有两点: 1.分析SQL的查询计划,看是否用了合适的索引; 2.改变表的数据结构,或者增加冗余字段,以提升性能。
现在只能看第一个方案了,第二个因为,我们在今年就要上新的ERP系统了,在去修改表结构什么的也不太理想。 |
|
返回顶楼 | |
发表时间:2008-02-01
hgq0011 写道 yyliuliang 写道 开Profile 跟踪那些延时高,消耗资源高的sql语句,然后查询分析器里执行查看执行计划,哪些语句没有使用到索引,哪些统计需要更新...
建议 我跟踪到一个SQL要10S左右。 把效率低的sql语句的执行计划截几个图 重点看Profile里Duration 和Reads数高的 |
|
返回顶楼 | |
发表时间:2008-02-01
yyliuliang 写道 把效率低的sql语句的执行计划截几个图 重点看Profile里Duration 和Reads数高的 那图看不出什么门道来。 能详细说一下吗? |
|
返回顶楼 | |
发表时间:2008-02-01
hgq0011 写道 yyliuliang 写道 把效率低的sql语句的执行计划截几个图 重点看Profile里Duration 和Reads数高的 那图看不出什么门道来。 能详细说一下吗? 你看不出门道不要紧,贴上来让会看的分析一下呗。然后你在顺便学学。 不提供充足的信息,大伙也只能给你模糊的可能性分析。 信息提供得越具体,解决的可能性越大。如有疑问,请先看本站的“提问的智慧”。 |
|
返回顶楼 | |
发表时间:2008-02-01
hgq0011 写道 xiaoyu 写道 首先要分析出, 你的索引有没有被使用, 如果没有被使用就白建了.
是的我也在考虑这个问题,请给我一些建议怎样确索引是否正确的被使用呢?我看到那个表已经建立了好几个索引,似乎建的不太正确。那个不是我负责的,正准备和同事商量能不能改善它,但是那个系统自从我们移走了200多万条记录,系统平稳运行。 xiaoyu 写道 如果这张表经常更新很多, 可以考虑让SqlServer采用Oracle的管理方式---就是select和update是不会被阻塞的.
这个能不能也请您具体说说,好吗? 因为我对ORACLE只懂一点皮毛,还正要更深入的研究它。谢谢! xiaoyu 写道 可以按条件进行分区-这样你就不用分割表了(SQL server不太清楚, oracle是没有问题的, 不过分区这种东西要看合不合适你的业务).
SQLServer也可以进行分区的,似乎视图(不知道正不正确)。 我要用的那部门数据,我按照业务条件和估算日期建立了一个视图。从150W的记录中只那上百条记录。但是就是这上条数据中一次拿几条数据也要10S左右。这个开销太大了。也让我很头痛呀。现在我都怀疑用视图做这样的事情合不合适?本来我想对视图建一个唯一聚索引,查询倒是可以使用。但是对应的应用系统不能使用,通过系统不能更新数据。 关于分析SQL的index使用情况可以参考:http://www.itlearner.com/article/2005/2443.shtml 关于第二个update是否会阻塞select(update和select在不同的事务里, 处理同一条记录), 你要查一下SQL SERVER的手册了(SQL SERVER 我不熟)。 分区的话, 你可以看一下手册。 |
|
返回顶楼 | |
发表时间:2008-02-02
Lucas Lee 写道 信息提供得越具体,解决的可能性越大 有些东西不便直接显示。 |
|
返回顶楼 | |
发表时间:2008-02-02
有效索引,db优化,不用存储过程,DAO CACHE,app水平或垂直克隆,
|
|
返回顶楼 | |
发表时间:2008-02-02
yyliuliang 写道 把效率低的sql语句的执行计划截几个图 重点看Profile里Duration 和Reads数高的 你是不是说的这个图? 引用的表名我去掉了。 |
|
返回顶楼 | |
发表时间:2008-02-02
对于你这种情况,建议在本地建一个数据库,针对你使用的情况建表(这样就避免了夺表查询的消耗),定期从其他系统取数据,然后你的页面从本地取数据就可以了。
|
|
返回顶楼 | |
发表时间:2008-02-02
dhcn 写道 对于你这种情况,建议在本地建一个数据库,针对你使用的情况建表(这样就避免了夺表查询的消耗),定期从其他系统取数据,然后你的页面从本地取数据就可以了。
这样不行,因为那些数据随时都可能改变,而且数据的价值非常高,出错就麻烦了。 |
|
返回顶楼 | |