读书人

sqlserver中为何有这些进程信息?今天找

发布时间: 2012-03-27 13:44:24 作者: rapoo

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,直至程序关闭。

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

好习惯是养成的~~~

读书人网 >VFP

热点推荐