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,直至程序关闭。
如果一次性有多个数据库连接,可以通过对变量进行特殊命名实现避免。
好习惯是养成的~~~