SQLServer 使用数据库邮件时常看到超时语句 sp_readrequest
2017-04-25 17:40
393 查看
当数据库使用邮件时,使用 trace 或 profiler 跟踪慢查询语句时,发现有一个语句出现频率较多:
exec sp_readrequest @receive_timeout=600000
既然是慢查询,是否需要优化呢?对这个存储工程 sp_readrequest ,网上资料太少。
查看存储过程定义:
use msdb
go
sp_helptext sp_readrequest
go
可以看到存储过程的功能说明:从消息队列中读取请求并返回内容
参数声明:此次读请求等待新消息的最大时间,这个时间可以从邮件参数中配置。
select * from msdb.dbo.sysmail_configuration
首选说该存储过程 sp_readrequest ,该存储过程执行时根据上面给定的时间,不断地尝试接收消息,也就是存储过程在这段时间内是一直运行的。
WAITFOR(RECEIVE conversation_handle, service_contract_name, message_type_name, message_body
FROM ExternalMailQueue INTO @msgs), TIMEOUT @rec_timeout
查看当前系统运行了什么语句,可以看到该存储过程正在运行中,处于挂起状态(suspended)
上面看到其等待类型为:BROKER_RECEIVE_WAITFOR
select * from sys .dm_os_wait_stats where wait_type='BROKER_RECEIVE_WAITFOR'
其实存储过程虽然占用着一个连接,但是并没有在运行操作,因此也不消耗IO、CPU等资源,不占用资源,不堵塞其他进程。虽然慢查询跟踪到了该语句,其实没必要优化,着只是一个邮件参数的设置,存储过程对其他没影响。
若更改时间,可在参数界面中更改,或者以下脚本更改,如:
--方法一:
UPDATE msdb.dbo.sysmail_configuration
SET paramvalue = 60 --60 Seconds
WHERE paramname = 'DatabaseMailExeMinimumLifeTime'
GO
--方法二:
EXECUTE msdb.dbo.sysmail_configure_sp 'DatabaseMailExeMinimumLifeTime', '60'
GO
参考:
Database Mail
SQL Server: Why a Session With sp_readrequest Takes so Long to Execute
SQL Server: Sessão executando há muito tempo com o comando sp_readrequest
(DatabaseMail)
exec sp_readrequest @receive_timeout=600000
既然是慢查询,是否需要优化呢?对这个存储工程 sp_readrequest ,网上资料太少。
查看存储过程定义:
use msdb
go
sp_helptext sp_readrequest
go
-- sp_readrequest : Reads a request from the the queue and returns its contents. CREATE PROCEDURE sp_readrequest @receive_timeout INT -- the max time this read will wait for new message AS BEGIN SET NOCOUNT ON --略…………
可以看到存储过程的功能说明:从消息队列中读取请求并返回内容
参数声明:此次读请求等待新消息的最大时间,这个时间可以从邮件参数中配置。
select * from msdb.dbo.sysmail_configuration
首选说该存储过程 sp_readrequest ,该存储过程执行时根据上面给定的时间,不断地尝试接收消息,也就是存储过程在这段时间内是一直运行的。
WAITFOR(RECEIVE conversation_handle, service_contract_name, message_type_name, message_body
FROM ExternalMailQueue INTO @msgs), TIMEOUT @rec_timeout
查看当前系统运行了什么语句,可以看到该存储过程正在运行中,处于挂起状态(suspended)
上面看到其等待类型为:BROKER_RECEIVE_WAITFOR
select * from sys .dm_os_wait_stats where wait_type='BROKER_RECEIVE_WAITFOR'
其实存储过程虽然占用着一个连接,但是并没有在运行操作,因此也不消耗IO、CPU等资源,不占用资源,不堵塞其他进程。虽然慢查询跟踪到了该语句,其实没必要优化,着只是一个邮件参数的设置,存储过程对其他没影响。
若更改时间,可在参数界面中更改,或者以下脚本更改,如:
--方法一:
UPDATE msdb.dbo.sysmail_configuration
SET paramvalue = 60 --60 Seconds
WHERE paramname = 'DatabaseMailExeMinimumLifeTime'
GO
--方法二:
EXECUTE msdb.dbo.sysmail_configure_sp 'DatabaseMailExeMinimumLifeTime', '60'
GO
参考:
Database Mail
SQL Server: Why a Session With sp_readrequest Takes so Long to Execute
SQL Server: Sessão executando há muito tempo com o comando sp_readrequest
(DatabaseMail)
相关文章推荐
- SQLSERVER监控复制并使用数据库邮件功能发告警邮件
- sqlserver 使用sql语句创建数据库、创建表
- SQL Server 使用数据库发送邮件(sp_send_dbmail)
- SQLSERVER监控复制并使用数据库邮件功能发告警邮件
- 使用SQL语句备份数据库时,出现如下错误:“超时时间已到。在操作完成之前超时时间已过或服务器未响应。”
- SQLServer使用sql语句复制数据库
- 触发器的使用 sqlserver中 数据库自动发送邮件功能
- [SQLServer:查询分析器]使用模板(Insert,Update,Select,SP)
- 数据库知识—SQL查询语句精华使用简要
- 使用XML封装数据库操作语句的实现
- 数据库查询语句使用简介
- 数据库知识-SQL查询语句精华使用简要
- 使用DAAB3.1连接多种数据库(SqlServer,OleDB,ODBC)(原创)
- 使用Bulk Insert语句将文本文件读入数据库
- 在SQLServer 2000中,使用SQL语句判断某一字段是否为空
- 记下一条使用SQLServer 2000 T-SQL中日期函数比较多的一个SQL语句
- SqlServer下数据库链接的使用方法
- 数据库知识—SQL查询语句精华使用简要
- 使用SQL语句获取数据库中随机N个记录
- [转] 在 MySQL 数据库中使用 C 执行 SQL语句