记我真实的一段维护任务:程序查询慢到最快也需要15秒?

程序报错:开始的由于系统缓冲区空间不足或队列已满问题解决办法

一般有2点原因:
a)系统内存不足,情况表现为空闲数低于200以下,系统句柄数大的可怕,达到10几W
b)TCP连接数不够,严重的可能导致数据库连接失败,项目部同事之前也说过这样的情况,就是此问题导致的,前提是物理内存/虚拟内存设定值都正常的情况下增加TCP连接数(可能是你留作种的原因,所以tcp的端口(UserPort)请求已经达到你pc上本地设置的界限(MaxUserPort),默认的一般比较小,正广和的这台机器可能需要活动的TCP数量太多,所以需要设置大点),可以试着修改此键值,方法如下:
启动注册表编辑器,在注册表中,找到以下子项,然后单击 $参数(Parameters 翻译过来就是>>参数<<的意思) HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters
在编辑菜单中,单击新建,然后添加以下注册表项:
值名称: MaxUserPort
值类型: 双字节
值数据: 65534
有效范围: 5000-65534 (十进制)
默认值: 0x1388 (5000 十进制)
退出注册表编辑器,然后重新启动计算机。
2、针对一般的数据库,具有以下几点优化法则
  • 1、减少数据访问(减少硬盘访问,这个就是我们程序的事了,项目由于是老的项目,还是ASP.NET编写的,考虑到改源码起来麻烦,所以后面我经过仔细分析增加了索引)

  • 2、返回更少的数据(减少网络传输或磁盘访问)

  • 3、减少交互次数

  • 4、减少服务器CPU及内存开销

  • 5、利用更多的资源(增加资源)

一般处理这样的情况,
  • 一、修改SQL语句,由于项目太老,更改源码麻烦,所以我采用了增加索引,建立索引的优点:(1.大大加快数据的检索速度; 2.创建唯一性索引,保证数据库表中每一行数据的唯一性; 3.加速表和表之间的连接; 4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间)

  • 二、增加索引(聚集索引和唯一索引),在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。 如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。唯一索引,针对经常查询的字段,客户那边告诉我,有时间、工号和分机号。我主要对这三个经常的字段进行了增加索引。

  • 建立索引的语法:CREATE 索引名称 ON 表名(需要创建索引的字段);

经过这样的调优,速度最慢也可以1秒就查询出来了。好了,以上就是问题的解决方法和我个人的一些经验分享。

本文出自思考者日记网,转载请保留此出处!原文地址:http://www.shuyangyang.com.cn/jishuliangongfang/shujuku/2014-03-18/197.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章