当前位置:数据库 > SQLServer >>

MSSQL数据库 数据量过200万,怎么样可以加速、稳定

数据库有一个表的数据达到了200万,是MSSQL2000版本 现在访问起来比较困难,有变慢的感觉,数据库大小是100MB,也就是说那个表的数据其实没太多的内容,无非是记录一些东西! 怎么样,才可以让数据库访问快速点,稳定一些! 为保证方案原创性,采纳给出方案过程并可以有效解决的答案,对于复制来的内容,无论是否适合,都不给分! 谢谢!
补充:索引如何正确建立?
我其实有建立索引,可是开始的时候还可以变快,现在不可以
答案:看一下索引的创建规则:
1、表的主键、外键必须有索引;
2、数据量超过300的表应该有索引;
3、经常与其他表进行连接的表,在连接字段上应该建立索引;
4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5、索引应该建在选择性高的字段上;
6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;
8、频繁进行数据操作的表,不要建立太多的索引;
9、删除无用的索引,避免对执行计划造成负面影响;
其他:100MB真的很小,优化的关键就是查询的索引,你检查你的查询语句,看看条件和排序的字段是否有索引。 这个可能有很多原因,要具体 看一看才能有好的方案 给出你的表结构啊。。和使用环境。级常用查询方式(最好查询常用字段)
你这样模糊的问,没办法回答 你的数据量并不大,加快访问速度,要考虑的因素很多
1,优化设计,包括数据库结构设计,尽可能少用连接查询,查询语句优化
2,优化数据库存储设计,建立高效的索引,按照建议的原则建立索引,存储介质要满足访问要求,比如高速磁盘
3,优化系统环境,系统尽量不要和其他应用混用,有防毒等等安全措施,保证充足的内存和CPU资源
4,做好系统维护,定期清理系统垃圾,定期维护索引,时间长了可以重做索引,定期做数据库碎片整理

等等,总之一个系统要运行的好,是由设计和维护的质量决定的,一个大型的数据库系统里面数据库管理员工作的重要性就体现在这里。 

开始时候数据库数据量小,要经过压力测试才能发现问题,时间长了日志文件也变大,你可以做下性能监视 随着记录的越来越多,访问效率有所降低那是正常的,但像你的“200万条记录,100MB的”数据库,应该效率很高才对的
估计是你哪里出现了瓶颈问题了

首先,问题可能由以下方面引起的:
1、磁盘io速度慢?
2、你的库中一些大表(记录比较多的表)的索引建立得不合理?
3、你的一些sql语句写法不够优化?
4、可能涉及到数据库操作的一些逻辑处理操作比较复杂?
5、分配给SQL SERVER的可用内存过小,造成数据缓存命中率过低?(即大部分数据每次都要读自硬盘,而不是读自内存缓冲)
6、是否有一些涉及到操作数据库的大计划任务在频繁的执行着?
7、是否表的索引产生了大量的碎片,造成命中率过低?

下面列出一些检查解决办法:
1、通过“windows 任务管理器”中的“进程”项添加io列检查io的变化及处理速度。
2、如果你系统是多个磁盘的,考虑在数据库的文件组下建立多个文件(这多个文件分散到不同的磁盘上去,以提高io处理速度)。
3、检查你的库中,哪些表的记录多,然后着重分析这些大表的结构、索引等是否建立得合理(注:索引不是越多越好的,因为索引在提高查询效率的同时,也会增加维护索引的代价的,如:update表、insert表、delete表等时需要维护索引)。
4、利用sql server自带的“事件探查器”去跟踪数据库中哪些语句的执行最为耗时(通过这个基本上可以定位整个系统慢在哪些语句上)?
5、找到一些下率低下耗时的语句,分析其涉及到的表的索引是否合理,可以把语句拷贝到“查询分析器”上,然后按"ctrl+K"显示语句的“执行计划”,然后按F5执行语句,看其“执行计划”的结果,跟踪分析这些语句慢在那里(这里有便于引导你去建立一些合理的索引)。
6、建议你的服务器只跑数据库,然后给其分配合理足够的内存让SQL SERVER独占,在“企业管理器”里,选中你注册的SQL SERVER服务器,右键,然后在弹出的窗口里选“属性”,进去再选“内存”那项,把内存的最大值设为一个合理的值(如:你的服务器只跑SQL 服务的话,那可以选80%的内存给SQL server)。
7、检查SQL server的作业,看是否常有一些大作业调度在执行?这些调度是否可以优化或合并?
8、定期对表的索引进行重建(特别是对一些频繁变化记录的大表),另外,在重建时,对一些频繁变化记录的表,其填充因子要填合适的值(如,一个表的记录是不断增加的,那填充因子就不能填100%了,这样容易引起页拆分而使效率降低),下面举个例子:
     下例使用填充因子值 70 重建 authors 表上的所有索引。
     DBCC DBREINDEX (authors, '', 70)

9、利用系统自带的一些存储过程去跟踪系统每个连接的cpu、io等情况或资源锁定情况,这样容易定位一些连接或操作或对象等。如:
  sp_who2
  sp_lock 

上一个:在mssql 2000中如何把时间存储成2002-12-05这样的格式?
下一个:win2000机器上装的mssql是什么??

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,