在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前因:近日在一项目中数据库服务器CPU频繁发生负荷几乎达到100%崩溃状态,检查发现很多对AspState会话状态库进程阻塞情况,通过排查发现tempdb..ASPStateTempSessions的扫描碎片比率很大,故怀疑此引发问题的,为保守起见,没有重新执行脚本InstallSqlState.sql,而是执行dbcc dbreindex对tempdb..ASPStateTempSessions表进行索引重建,经过在线高峰监测,数据库服务器CPU负荷大幅下降,运作正常,问题解决! 虽然问题解决了,但还是留下很多需要是深入了解探究的知识。 重建索引前 表: 'ASPStateTempSessions'(1977058079);索引 ID: 1,数据库 ID: 2 重建索引后 表: 'ASPStateTempSessions'(1977058079);索引 ID: 1,数据库 ID: 2 扫描密度大幅提高,碎片下降! 下面简单整理一下关于会话状态的相关知识。 参考微软MSDN文章:http://msdn.microsoft.com/en-us/library/ms178586(v=VS.85).aspx
1、In-process Mode 默认进程模式 <sessionState mode="Inproc" cookieless="false" timeout="20"/> </sessionState> 2、State Server Mode <sessionState mode="StateServer" stateConnectionString="tcpip=dataserver:42424" cookieless="false" timeout="20"/> </sessionState> 3、SQL Server Mode <sessionState mode="SQLServer" sqlConnectionString=" Integrated Security=SSPI;data source=dataserver;" cookieless="false" timeout="20"/> </sessionState> 语法: <sessionState mode="Off|InProc|StateServer|SQLServer" cookieless="true|false" timeout="number of minutes" stateConnectionString="tcpip=server:port" sqlConnectionString="sql connection string" stateNetworkTimeout="number of seconds" /> mode 设置将Session信息存储到哪里? Off 设置为不使用Session功能 InProc 设置为将Session存储在进程内,就是ASP中的存储方式,这是默认值。 StateServer 设置为将Session存储在独立的状态服务中。 <驱动器>:\systemroot\Microsoft.NET\Framework\version\aspnet_state.exe SQLServer 设置将Session存储在SQL Server中。 <驱动器>:\systemroot\Microsoft.NET\Framework\version\InstallSqlState.sql 可选的属性是: 属性 选项 描述 cookieless 设置客户端的Session信息存储到哪里 ture 使用Cookieless模式 false 使用Cookie模式,这是默认值。 timeout 设置经过多少分钟后服务器自动放弃Session信息。默认为20分钟 stateConnectionString 设置将Session信息存储在状态服务中时使用的服务器名称和端口号,例如:"tcpip=127.0.0.1:42424”。当mode的值是StateServer是,这个属性是必需的。 sqlConnectionString 设置与SQL Server连接时的连接字符串。 例如"data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind"。当mode的值是SQLServer时,这个属性是必需的。 stateNetworkTimeout 设置当使用StateServer模式存储Session状态时,经过多少秒空闲后,断开Web服务器与存储状态信息的服务器的TCP/IP连接的。默认值是10秒钟。
systemroot\Microsoft.NET\Framework\versionNumber\InstallSqlState.sql 如:aspnet_regsql.exe -S 数据库实例名 -E -ssadd -sstype p
安装 打开VS命令提示,输入:aspnet_regsql.exe –? aspnet_regsql.exe的说明,有一命令:-ssadd(Session state add?) 意为:添加对 sqlserver 模式会话状态的支持. 输入如下: aspnet_regsql.exe -ssadd –E 或 指定用户名:aspnet_regsql.exe -ssadd -U sa 删除该功能则执行aspnet_regsql.exe -s-s-remove –E
参考资料: http://www.cnblogs.com/leonsky/articles/1427014.html http://msdn.microsoft.com/en-us/library/ms178586(v=VS.85).aspx http://space.itpub.net/16436858/viewspace-551828 |
请发表评论