本文发表在 rolia.net 枫下论坛1. SQL 7 在SP1 之前存在memory leak的问题,当然如果你已经apply 了最新的sp, 这个应该不是问题了.
2.关于locking的问题, 可能是单一的statement(implicit transaction)或者是所谓的transaction block造成的. 当一个statement去access一个object时,其他的statement如果也要试图打开同一个object就只有等待,一直到前者完成为止,如果前者持续的时间过长,就有可能造成后者出现tiemout error.要确定是否这个问题,你可以打开sql profile,当问题出现的时候,看看当时在server端运行的是什么东西,是否由于它block住了其他的transaction.
这儿有几点要说明一下:
1.transaction应该尽量短,前后加begin tran 和commit tran 以及rollback 是explicit transaction 的基本要求,但不代表那个transaction就不会产生blocking.要知道在transaction commit 或 rollback之前,所有的被用的object都是被lock住的.
2.不管你的application是否ASP,依然可能通过stored proc调用server cursor, 你所说的recordset相对于SQL SERVER 来说基本属client cursor,对server影响的是前者
3.如果你的server只是用于SQL SERVER, 你应该使用dynamic memory setting, 只是限制一下maximum value就可以了, 对database 来说,memory 总是越多越好的.
几点不成熟的意见,仅供参考.更多精彩文章及讨论,请光临枫下论坛 rolia.net
2.关于locking的问题, 可能是单一的statement(implicit transaction)或者是所谓的transaction block造成的. 当一个statement去access一个object时,其他的statement如果也要试图打开同一个object就只有等待,一直到前者完成为止,如果前者持续的时间过长,就有可能造成后者出现tiemout error.要确定是否这个问题,你可以打开sql profile,当问题出现的时候,看看当时在server端运行的是什么东西,是否由于它block住了其他的transaction.
这儿有几点要说明一下:
1.transaction应该尽量短,前后加begin tran 和commit tran 以及rollback 是explicit transaction 的基本要求,但不代表那个transaction就不会产生blocking.要知道在transaction commit 或 rollback之前,所有的被用的object都是被lock住的.
2.不管你的application是否ASP,依然可能通过stored proc调用server cursor, 你所说的recordset相对于SQL SERVER 来说基本属client cursor,对server影响的是前者
3.如果你的server只是用于SQL SERVER, 你应该使用dynamic memory setting, 只是限制一下maximum value就可以了, 对database 来说,memory 总是越多越好的.
几点不成熟的意见,仅供参考.更多精彩文章及讨论,请光临枫下论坛 rolia.net