在网上发现了很多关于Audit logout的帖子,基本上都是属于提出问题但没有答案的,关于这个问题,我越发觉得这是微软的一个Bug,首先说一下我测试的经过:测试是从安装sqlserver2005开始,之后用c# + ado.net直接访问数据库 开profiler监控执行语句。
测试一:
    安装sqerserver2005,在安装选项界面上只选择了Sql Server DataBase Services和工作站组件(略去几个字) ,如果没有直观印象可以看看下图,首先我并没有急于使用程序访问数据库来监测sql语句的执行情况,而是先打开Sql Server Management Studio中的活动监视器看了一下,发现各连接的图标显示正常(关于活动监视器中连接的图标请大家一定要看一下帮助以了解一下各图标的含义,不然下一个测试的描述会难以对比,可以看此贴http://msdn.microsoft.com/zh-cn/library/ms178520(v=sql.90).aspx),然后用profiler监控程序访问数据库,发现在多次执行sqlconnection.Open()和sqlconnection.Close()时并没有出现Audit login和Audit logout,整个测试过程只在程序第一次访问数据库时有一个audit login,在程序退出时有一个audit logout。测试二:
    安装sqlserver2005,在安装选项界面上把所有的都选中了,安装之后,打开Sql Server Management Studio中的活动监视器看了一下,发现各连接的图标全部显示为未知,也就是一个有双向的横放着的箭头的图标(单从此点,我就觉得足以认为是微软的Bug了,因为连接状态的术语与图标完全不一致啊,为什么连接的状态都是未知?!);且问题就出在这块,用profiler监控程序访问数据库,发现每执行一句SQL语句,都会有一句audit login和audit logout,搞什么飞机,一开始我还以为是连接池问题,但是,调试了下.net代码,才发现所有的sqlconnection._innerconnection的创建时间都是一样的,也就是说连接池没有问题,那么为什么会频繁的存在login和logout呢?有人会说login和logout是不影响性能的,真不影响吗?举一下我跟踪到的例子(不知道怎么贴图进来,知道的请教我一下,下面我把跟踪的情况写一下好了)
语句                     执行时间
audit login
自己的sql语句              0ms
audit logout               3000ms

有人说logout的执行时间指的是从login到logout的总运行时间,所以但看logout的执行时间是不能够判断性能问题的;但是从我上面写的,你应该能看到,audit logout自身的执行时间是(3000-0)ms=3000ms,而实际的应用场景下,比如点下一个保存按钮,会有一批SQL语句执行,而每个sql语句中都夹杂着一个执行能过1s的audit logout,难道不出现性能瓶颈??
但看测试二的情况也许不能证明什么,但是与测试一的情况一对比,绝对有问题啊,首先是活动监视器的图标问题,其次是audit logout的问题导致的性能问题;难道说把所有的安装选项都选上了,是需要作一些特殊设置的吗?这点还请达人教教我,但是单从活动监视器的图标问题来看,说是微软的bug一点都不过。测试三:,
 安装sqerserver2005,在安装选项界面上只选择了Sql Server DataBase Services和工作站组件(略去几个字),安装之后的测试当然如测试一所描述的,一切正常;但是我打了sp3补丁,结果又如测试二所描述的了
请大家讨论讨论,另外,想上给微软提个支持问题,谁告诉我下怎么弄啊?