设为首页 收藏本站
查看: 1017|回复: 0

[经验分享] SQl Server 2008速度极其慢的假象

[复制链接]
发表于 2018-10-11 12:58:31 | 显示全部楼层 |阅读模式
  有一06年的项目,到目前为止,数据库中的单表记录数超过了一千万条记录,以前的服务器有点不适应了,外加业务上要进行些升级,因此这次更换了台服务器,服务器配置如下:
  单CPU,4核心,2线程/核心。
  由于现在内存不怎么贵,因此我让他们加到8G物理内存。
  两块300G左右的硬盘做RAID1。
  升级时,我顺便让他们买了个SQL 2008,计划从以前的2005升级到2008。
  由于不怎么想直接把2005的mdf文件附加到2008下使用,因此我在2008下重新建立了数据库文件,然后通过SQL把之前的部分数据据导入到新的数据库中。由于至少需要保留一年的数据,因此单表还有400万条记录左右。
  问题出现了,客户端运行极其慢,遍访网络各大文章,发现SQL Server无法直接使用超过2G的内存,于是做了调整,应该是可以使用超过2G的内存了(方法下方表述)。但是速度还是不行,如果直接把2005的数据文件附加进去则速度不错。从网络上偶然看到文章需要重建索引,于是查找新建数据库中的索引,发现导出脚本时并没有把索引导出,于是重新导脚本,不过一加上索引,导出就失败,没办法,之后通过手工在各个表中添加了之前建立的索引,于是速度问题解决。
  SQL使用大内存方法:
  以前的服务器,由于内存的价格过高,一般配的内存不是很多,超过4G的当然就不多了.现在的服务器,配置超过4G就很多,在配作SQL 数据库服务器后,很多的人只选默认的设置,虽然可以正常使用,可是却把大量的内存给浪费(SQL服务使用的内存不会超过1.8G),系统的性能也不能因为的大内存而提升,这是很可惜的.  在本文中,我大致讲一下配置的过程.(如果服务器的内存少于4G,不用配置)(网上完全讲这个的,没有见过,随手写一个)
  1.打开系统中的大内存支持(windows)
  若要启用 Windows 2000 Advanced Server 或 Windows 2000 Datacenter Server 支持大于4GB的物理内存,必须将参数 /pae 添加到 boot.ini 文件中。
  [boot loader]
  timeout=0
  default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
  [operating systems]
  multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Advanced Server" /fastdetect
  改为
  [boot loader]
  timeout=0
  default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
  [operating systems]
  multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Advanced Server" /fastdetect /pae
  这个改好后,要重启系统的
  2.启用锁定内存页选项(windows)
  启用锁定内存页选项
  在"开始"菜单上单击"运行"子菜单,然后在"打开"框中键入"gpedit.msc"。
  在"组策略"控制台上,展开"计算机配置",然后展开"Windows 设置"。
  展开"安全设置",然后展开"本地策略"。
  选择"用户权限分配"复选框。
  详细资料窗格中随即显示出策略。
  在详细资料窗格中,双击"锁定内存页"。
  在"本地安全策略设置"对话框中,单击"添加"按钮。
  在"选择用户或组"对话框中,添加有权运行 sqlservr.exe 的帐户。
  3.启用SQL的AWE
  若要启用 AWE,请将 awe enabled 设置为 1。除非指定了 max server memory 的值,否则 SQL Server 将保留几乎所有可用内存,只留下 128 MB 或更少。
  如果已成功启用该选项,则当 SQL Server 2000 实例启动时,SQL Server 错误日志中将出现"已启用地址窗口扩展"这条消息。
  awe enabled 是高级选项。如果正在使用 sp_configure 系统存储过程更改该设置,则只有当 show advanced options 设置为 1 时才能更改 awe enabled。
  code 如下,设定SQL 使用6G的内存
  sp_configure 'show advanced options',1
  RECONFIGURE
  GO
  sp_configure 'awe enabled',1
  RECONFIGURE
  GO
  sp_configure 'max server memory',6144
  RECONFIGURE
  GO
  必须重新启动 SQL Server 2000 实例才能使更改生效。
  net stop mssqlserver
  net start mssqlserver
  这样,SQL 服务启动后,就会把6G的内存给锁定,完全供SQL使用参照SQL帮助文件
  注:也可以通过SQL Server的属性,进入内存属性页中启动AWE,不过我还是通过脚本启动了。脚本启动需要单步执行,不可所有一起执行,看执行状态之后决定下一步的方案。
  重建索引的方法
  USE DatabaseName --Enter the name of the database you want to reindex
  DECLARE @TableName varchar(255)
  DECLARE TableCursor CURSOR FOR
  SELECT table_name FROM information_schema.tables
  WHERE table_type = 'base table'
  OPEN TableCursor
  FETCH NEXT FROM TableCursor INTO @TableName
  WHILE @@FETCH_STATUS = 0
  BEGIN
  DBCC DBREINDEX(@TableName,' ',90)
  FETCH NEXT FROM TableCursor INTO @TableName
  END
  CLOSE TableCursor
  DEALLOCATE TableCursor
  具体的脚本可能会根据不同的版本有差异


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-620400-1-1.html 上篇帖子: 牛神级的sql语句 下篇帖子: SQL Server 2005 与 SQL Express 的异同
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表