SQL Server服务代理指南

在Denny先生的博客中,SQL Server专家Denny Cherry讨论了SQL Server功能基础。其中一个话题主要是围绕SQL Server服务代理,和MSMQ有着相同的基础概念的消息队列(message queue)系统。无论你是一名新手还是一名专家,本篇指南都会向你提供如何建立和调整SQL Server这一新补充的相关信息。

SQL Server服务代理概述

    
SQL Server服务代理能够保证消息发送顺序,总是对按顺序接收的消息做出相同的处理过程。消息可以按要求进行处理(你可以编写软件来按时间查询服务代理)或者自动地队列激活。

SQL Server服务代理消息类型

    
消息类型是服务代理相关的第一个对象。消息类型定义了消息名称、以及服务代理必须在消息发送之前要做的验证。

SQL Server服务代理的契约

    
每一个服务代理会话都需要一个契约(Contract)。这个契约定义了哪个或哪些类型的消息会被使用,以及谁(发送者和接收者)可以使用这些类型的消息。契约是在会话创建时指定的。

SQL Server服务代理的队列

    
服务代理队列是消息被发送后存储的地方,但队列中的消息是还没有被处理的。队列有点像数据库表一样,你可以用来插入数据(发送消息)以及查看表中的数据(接收消息)。

SQL Server服务代理的服务

    
服务是用于将契约绑定到队列上的。它们也用于数据库到数据库,或者服务器到服务器之间的消息路由(我们将在后面讨论路由)。

SQL Server服务代理的路由

    
路由只是在从一个服务器向另一个服务器发送服务代理消息时才会用到。它们定义了发送消息所需要的SQL Server和SQL Server将要连接的TCP端口。如果你是向一个镜像数据库发送消息,你也可以像指定主数据库一样指定该镜像数据库。

SQL Server服务代理的SEND命令

    
SEND命令是在SQL Server 2005版本引入的。它是一种类似于INSERT的命令,只是SEND只用在SQL Server服务代理中。在服务代理中,你是将数据填入一个队列,而不是数据库表中。你并不是把命令插入到队列中,而是向队列发送一个消息,这就像你向其他人发送一个电子邮件一样。

SQL Server服务代理的RECEIVE命令

    
RECEIVE命令用于从队列中获取消息,这样你就可以对message_body字段中的数据进行处理。从本质上来说,RECEIVE命令在很多情况下与SELECT语句的使用方法很相似。

SQL Server服务代理的消息已删除错误

    
我经常遇到有关消息删除的问题,可能其他人也会遇到同样的问题。你仍然能够在sys.conversation_endpoints DMV中看到该会话仍处于“会话中(CONVERSING)”状态,而不是“关闭(CLOSED)”状态。

改进SQL Server服务代理的性能

    
在高负载的服务代理环境中,通过重用服务代理会话能够大大提升服务代理的性能。为每一个消息创建和关闭会话需要的开销大约是4X,而对于接收消息的性能提升大约能达到10X。Remus Rusanu在他发布在Reusing Conversations的博客上,谈到这个估值可能更大,并且还提出了一种重用会话的解决方案。

监控SQL Server服务代理的运行状况

    
在处理SQL Server服务代理问题时,我需要一个快速简单的方式来查看服务代理的积压事务。所以我选择使用下面的这样一个小查询,它非常有效……
没有时间详细阅读本技术专题的所有内容?想保存一份完整的资料,供日后参考?请点击这里,下载本技术专题的完整PDF版(本服务仅向注册会员免费提供。如果您还不是会员,请先注册)。
TechTarget中国旗下网站原创推荐
TT安全
TT存储
TT CIO
TT SOA
 
安全的程序必须最小化特权,以降低 bug 转化为安全缺陷的可能性。本文讨论了如何通过最小化有特权的模块、授与的特权以及特权的有效时间来最小化特权。
 
 
 
 
 
 
TT数据库
TT网络
TT服务器
TT数据中心
 
SQL Server 2008中最新的文件流功能使得你可以将实际数据存储在文件系统中,而非在数据库中。只要愿意,你仍可以作为一个常规的二进制列来查询此列。
 
 
 
 
 
 
 
我们在SQL Server 2008 B的SSIS服务中,经常会用到变量。SSIS的变量分为两种,一种是系统变量,一种用户定义的变量。系统变量包含有关包、容器……
 
创建可在选定的SQL Server版本上运行的脚本。无法为早期版本编写SQL Server 2005新增功能的脚本。某些为SQL Server 2005创建的脚本无法在运行……
 
在生成脚本过程中,有很多参数可以选择,合理的配置这些参数,可以让我们很方便的按照我们的期望生成脚本。本文着重介绍了如何在SQL Server中生成脚本。
 
在SQL Server 2000的视图中使用*符号时我们应该注意些什么?本文中描述了sp_refreshview的功能:刷新指定视图的元数据。由于视图所依赖的基础对象的更改……
 
有些朋友看到这个标题可能会有疑问,难道在视图中使用*符号还有何要注意的地方吗?对于这个问题,我们先不必回答,先看一下文中的例子吧。

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
登录Email
请输入您的登录Email
密码
下次自动登录