首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

sqlserver中为何有这些进程信息?今天找到原因了(自己认为是),该怎么解决

2012-03-27 
sqlserver中为何有这些进程信息?今天找到原因了(自己认为是)近日发现SQLserver上的进程从早到晚一直增加,

sqlserver中为何有这些进程信息?今天找到原因了(自己认为是)
近日发现SQLserver上的进程从早到晚一直增加,当然有些是由于用户增多的原因.

 那些进程里的SQL语句大都是select USER_NAME() select usertype,type,name from systypes where usertype>=257,
 
 一天下来有几千条.虽然没有造成阻塞,但是看着很是不爽。

 今天找到原因了(自己认为是)

 程序是用VFP写的,举例说下原因

 首先是建立连接到SQL:
  
 CON=SQLSTRINGCONNECT("driver=SQL Server;Server=BOE;Uid=sa;pwd=;database=northwind") 

 程序执行这条语句后,可以看到SQLserver的进程里就多了条进程,

 里面的SQL语句就是select USER_NAME() select usertype,type,name from systypes where usertype>=257

 再执行下面的语句

 lcSQL="SELECT * FROM TABLE WITH (NOLOCK) "
 =SQLEXEC(CON,lcSQL,'T1')

如果查询要的时间久的话,你可以看到 原来的进程里的语句select USER_NAME() select usertype,type,name from systypes where usertype>=257

 已经变成了 SELECT * FROM TABLE WITH (NOLOCK) 

 等SQLserver执行完上面的查询后,如果不断开连接 ( =SQLDISCONNECT(CON) )
  
 那么 刚才的那条进程就总是存在( SELECT * FROM TABLE WITH (NOLOCK) )

 如果断开连接 ,那么那条进程就没有了。

 由于多建立了个连接 con2.....,而以后又没用到这个连接,这个连接又没有断开,所以sqlserver进程里的就会越来越多这

些处于等待状态中的语句.

[解决办法]
连接一般一个就够用了,为何要建多个连接。
多次建立连接也可以,用过之后就断开,用时再建立连接。
[解决办法]
新建的Session(会话) ID一般为1(可以检测值来确认已存在多少个),未关闭再新建自动+1,直至程序关闭。

如果一次性有多个数据库连接,可以通过对变量进行特殊命名实现避免。

好习惯是养成的~~~

热点排行