SQL Server客户端请求
SQL Server是客户端 - 服务器平台。通过发送包含对数据库请求的命令是与后端数据库进行交互的唯一方法。你的应用程序和数据库之间通信的协议被称为TDS(表格数据流协议)。
应用程序可以使用该协议支持的任意一个客户端实现,主要有 SqlClient,OLEDB,ODBC,JDBC,PHP SQL Server驱动程序或者开源的FreeTDS(http://www.freetds.org/ )。
它的主要作用是告诉数据库引擎你的应用程序通过TDS协议请求数据库需要做何种事情。
TDS协议请求(REQUESTS)包含以下几种形式
1. 批量请求(Batch Request)
这种类型请求只包含要执行的T-SQL批处理文本。这种类型的请求没有外部参数,但T-SQL批处理本身可以包含局部声明变量。
这种请求是你使用SqlClient客户端的SqlCommand对象上调用了SqlCommand.ExecuteReader(),ExecuteNonQuery(),ExecuteScalar(),ExecuteXmlReader()(或者他们的异步调用方法)并且不包含任何参数。
如果使用SQL事件探查器监视,您将看到一个BatchStarting事件类(https://msdn.microsoft.com/en-us/library/ms190441.aspx )
2. 远程存储过程调用请求(Remote Procedure Call Request - RPC)
该类型请求包含一个需要执行的存储过程,可以包含任意数量的参数。特别注意的是,sp_execute使用指定的句柄和可选参数值执行已准备好的 T-SQL 语句,通过在表格格式数据流 (TDS) 包中指定 ID =12 来调用。
如果您监视使用SQL事件探查器,你会看到一个Starting Event事件类(http://msdn.microsoft.com/en-us/library/dd357576.aspx )。
3. 大容量装载请求(Bulk Load Request)
大容量装载是一种使用了BULK INSERT操作的特殊请求模式,如使用Bcp.exe,OLDDB的IRowsetFastLoad 接口或者是使用SqlBulkCopy的类。
大容量装载与其他请求不同,因为是在对TDS协议请求完成之前开始执行的唯一请求。这使得它能够开始执行,然后开始插入数据流中的数据。
SQL Server数据库引擎接收一个完整的TDS请求后,将创建一个任务来处理这个请求。所有的请求列表可以在系统试图sys.dm_exec_requests中查询。
其数据字典如下:
列名 |
数据类型 |
说明 |
session_id |
smallint |
与此请求相关的会话的 ID。 不可为 null。 |
request_id |
int |
请求的 ID。 在会话的上下文中是唯一的。 不可为 null。 |
start_time |
datetime |
请求到达时的时间戳。 不可为 null。 |
status |
nvarchar(30) |
请求的状态。 可以是以下值:
不可为 null。 |
command |
nvarchar(32) |
标识正在处理的命令的当前类型。 常用命令类型包括:
可通过结合使用 sys.dm_exec_sql_text 和请求对应的 sql_handle 来检索请求的文本。 内部系统进程将基于它们所执行任务的类型来设置该命令。 这些任务可以包括:
不可为 null。 |
sql_handle |
varbinary(64) |
请求的 SQL 文本的哈希映射。 可以为 Null。 |
statement_start_offset |
int |
在当前正在执行的批处理或存储过程中,指示当前正在执行的语句开始位置的字符数。 可以与sql_handle、statement_end_offset 和 sys.dm_exec_sql_text 动态管理函数一起使用,以便为请求检索当前正在执行的语句。 可以为 Null。 |
statement_end_offset |
int |
在当前正在执行的批处理或存储过程中,指示当前正在执行的语句结束位置的字符数。 可以与sql_handle、statement_end_offset 和 sys.dm_exec_sql_text 动态管理函数一起使用,以便为请求检索当前正在执行的语句。 可以为 Null。 |
plan_handle |
varbinary(64) |
用于执行 SQL 的计划的哈希映射。 可以为 Null。 |
database_id |
smallint |
对其执行请求的数据库的 ID。 不可为 null。 |
user_id |
int |
提交请求的用户的 ID。 不可为 null。 |
connection_id |
uniqueidentifier |
请求到达时所采用的连接的 ID。 可以为 Null。 |
blocking_session_id |
smallint |
正在阻塞请求的会话的 ID。 如果此列为 NULL,则表示请求未被阻塞,或锁定会话的会话信息不可用(或无法进行标识)。 -2 = 阻塞资源由孤立的分布式事务拥有。 -3 = 阻塞资源由延迟的恢复事务拥有。 -4 = 由于内部闩锁状态转换而导致此时无法确定阻塞闩锁所有者的会话 ID。 |
wait_type |
nvarchar(60) |
如果请求当前被阻塞,则此列返回等待类型。 可以为 Null。 有关等待类型的信息,请参阅 sys.dm_os_wait_stats (Transact-SQL)。 |
wait_time |
int |
如果请求当前被阻塞,则此列返回当前等待的持续时间(以毫秒为单位)。 不可为 null。 |
last_wait_type |
nvarchar(60) |
如果此请求先前已经阻塞,则此列返回上次等待的类型。 不可为 null。 |
wait_resource |
nvarchar(256) |
如果请求当前被阻塞,则此列返回请求当前等待的资源。 不可为 null。 |
open_transaction_count |
int |
为此请求打开的事务数。 不可为 null。 |
open_resultset_count |
int |
为此请求打开的结果集的个数。 不可为 null。 |
transaction_id |
bigint |
在其中执行此请求的事务的 ID。 不可为 null。 |
context_info |
varbinary(128) |
会话的 CONTEXT_INFO 值。 可以为 Null。 |
percent_complete |
real |
为以下命令完成的工作的百分比:
不可为 null。 |
estimated_completion_time |
bigint |
仅限内部使用。 不可为 null。 |
cpu_time |
int |
请求所使用的 CPU 时间(毫秒)。 不可为 null。 |
total_elapsed_time |
int |
请求到达后经过的总时间(毫秒)。 不可为 null。 |
scheduler_id |
int |
正在计划此请求的计划程序的 ID。 不可为 null。 |
task_address |
varbinary(8) |
分配给与此请求关联的任务的内存地址。 可以为 Null。 |
reads |
bigint |
此请求执行的读取数。 不可为 null。 |
writes |
bigint |
此请求执行的写入数。 不可为 null。 |
logical_reads |
bigint |
此请求已经执行的逻辑读取数。 不可为 null。 |
text_size |
int |
此请求的 TEXTSIZE 设置。 不可为 null。 |
language |
nvarchar(128) |
该请求的语言设置。 可以为 Null。 |
date_format |
nvarchar(3) |
该请求的 DATEFORMAT 设置。 可以为 Null。 |
date_first |
smallint |
该请求的 DATEFIRST 设置。 不可为 null。 |
quoted_identifier |
bit |
1 = QUOTED_IDENTIFIER 对于该请求是 ON。 否则为 0。 不可为 null。 |
arithabort |
bit |
1 = ARITHABORT 设置对于该请求是 ON。 否则为 0。 不可为 null。 |
ansi_null_dflt_on |
bit |
1 = ANSI_NULL_DFLT_ON 设置对于该请求是 ON。 否则为 0。 不可为 null。 |
ansi_defaults |
bit |
1 = ANSI_DEFAULTS 设置对于该请求是 ON。 否则为 0。 不可为 null。 |
ansi_warnings |
bit |
1 = ANSI_WARNINGS 设置对于该请求是 ON。 否则为 0。 不可为 null。 |
ansi_padding |
bit |
1 = ANSI_PADDING 设置对于该请求是 ON。 否则为 0。 不可为 null。 |
ansi_nulls |
bit |
1 = ANSI_NULLS 设置对于该请求是 ON。 否则为 0。 不可为 null。 |
concat_null_yields_null |
bit |
1 = CONCAT_NULL_YIELDS_NULL 设置对于该请求是 ON。 否则为 0。 不可为 null。 |
transaction_isolation_level |
smallint |
创建此请求的事务时使用的隔离级别。 不可为 null。 0 = 未指定 1 = 未提交读取 2 = 已提交读取 3 = 可重复 4 = 可序列化 5 = 快照 |
lock_timeout |
int |
此请求的锁定超时时间(毫秒)。 不可为 null。 |
deadlock_priority |
int |
请求的 DEADLOCK_PRIORITY 设置。 不可为 null。 |
row_count |
bigint |
已由此请求返回到客户端的行数。 不可为 null。 |
prev_error |
int |
在执行请求期间发生的最后一个错误。 不可为 null。 |
nest_level |
int |
正在对请求执行的代码的嵌套级别。 不可为 null。 |
granted_query_memory |
int |
为执行该请求的查询而分配的页数。 不可为 null。 |
executing_managed_code |
bit |
指示特定请求当前是否正在执行公共语言运行时对象,例如例程、类型和触发器。 只要某个公共语言运行时对象在堆栈中,就会设置此值,甚至从公共语言运行时中运行 Transact-SQL 时,也会设置。 不可为 null。 |
group_id |
int |
此查询所属工作负荷组的 ID。 不可为 null。 |
query_hash |
binary(8) |
对查询计算的二进制哈希值,用于标识具有类似逻辑的查询。 可以使用查询哈希确定仅仅是文字值不同的查询的聚合资源使用情况。 |
query_plan_hash |
binary(8) |
对查询执行计划计算的二进制哈希值,用于标识类似的查询执行计划。 可以使用查询计划哈希查找具有类似执行计划的查询的累积成本。 |
statement_sql_handle |
varbinary(64) |
适用范围:SQL Server 2014 至 SQL Server 2016。 保留供将来使用。 |
statement_context_id |
bigint |
适用范围:SQL Server 2014 至 SQL Server 2016。 保留供将来使用。 |
SQL Server客户端请求的更多相关文章
- SQL Server 磁盘请求超时的833错误原因分析以及解决
本文出处:http://www.cnblogs.com/wy123/p/6984885.html 最近遇到一个SQL Server服务器响应极度缓慢,并且出现客户端请求报错的情况,在数据库中的erro ...
- SQL Server客户端登录名与数据库用户关联
数据库迁移之后,在新的SQL Server客户端工具设置关联时,往往会报错: 用户.组或角色 'XXX' 在当前数据库中已存在. 解决方法: 首先介绍一下sql server中“登录”与“用户”的区别 ...
- SQL Server客户端工具到底使用的是哪个provider呢?
SQL Server客户端工具到底使用的是哪个provider呢? 转载自:http://blogs.msdn.com/b/apgcdsd/archive/2013/01/10/sql-server- ...
- SQL SERVER HTTP请求
--开启Sql Server 通讯配置-- sp_configure ; GO RECONFIGURE WITH OVERRIDE; GO sp_configure ; GO RECONFIGURE ...
- SQL Server 查询请求
当SQL Server 引擎接收到用户发出的查询请求时,SQL Server执行优化器将查询请求(Request)和Task绑定,并为Task分配一个Workder,SQL Server申请操作系统的 ...
- Arcgis连接SQL Server提示试图使用不支持的旧版SQL Server客户端通信软件进行连接
一般提示这种错误的是arcgis服务区和SQL server服务器不在同一台电脑上,但在同一个局域网. 遇到这种问题是arcgis 服务器客户端连接SQL server数据库有问题,要么是客户端没有安 ...
- SQL SERVER 2005 请求失败或服务未及时响应
出现的问题如图所示,在开始->程序->Microsoft SQL Server 2005->配置工具->SQL Server Configuration Manager中,打开 ...
- SQL Server(MSSQLSERVER) 请求失败或服务未及时响应,有关详细信息,请参见事件日志或其他的适用的错误日志。
转自:https://www.fengjunzi.com/blog-25573.html 问题 有时候sqlserver无法启动了,原因是mssqlserver服务没有启动,当你手动启动时,又出现服务 ...
- 当您尝试从 64 位 SQL Server 客户端上运行分布式的查询到链接的 32 位 SQL Server 时,您可能会收到一条错误消息
如何处理64位SQL访问32位SQL执行脚本语句问题 链接服务器"SERVER_YBJK"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 &qu ...
随机推荐
- php 生成word的三种方式
原文地址 http://www.jb51.net/article/97253.htm 最近工作遇到关于生成word的问题 现在总结一下生成word的三种方法. btw:好像只要是标题带PHP的貌似点击 ...
- windows 64位 安装apache+php+mysql
1.下载PHP.Apache和Mysql软件以及VC库. 下面分别是PHP.Apache和Mysql的官网地址. PHP:http://windows.php.net/qa/ 注意 选择Thread ...
- 淘宝分布式文件存储系统:TFS
TFS ——分布式文件存储系统 TFS(Taobao File System)是淘宝针对海量非结构化数据存储设计的分布式系统,构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问. ...
- svn强制加注释才能提交
进入库的hooks目录下 cp pre-commit.tmpl pre-commit 并对pre-commit加入运行权限 修改pre-commit内容如下 REPOS="$1" ...
- html5图像组合
一 图像组合 1.绘制阴影 在绘制阴影效果时,需要使用Canvas的多个属性配合完成 shadowBlur设置阴影的迷糊级数 shadowOffsetX设置形状与阴影的水平距离 shadowOffse ...
- phpstorm 使用技巧
专题1 专题2 专题3 专题4 快捷键
- python动态创建类的声明
动态创建类的声明 使用内置函数type,原型:class type(name, bases, dict)name是类的名字,相当于__class__bases是类的基类,元组,可以有多个基类,但是基类 ...
- User space 与 Kernel space
学习 Linux 时,经常可以看到两个词:User space(用户空间)和 Kernel space(内核空间). 简单说,Kernel space 是 Linux 内核的运行空间,User spa ...
- PHP 图片上传工具类(支持多文件上传)
====================ImageUploadTool======================== <?php class ImageUploadTool { private ...
- 关于angularjs指令
一个指令用来引入新的HTML语法.指令是DOM元素上的标记,使元素拥有特定的行为.举例来说,静态的HTML不知道如何来创建和展现一个日期选择器控件.让HTML能识别这个语法,我们需要使用指令.指令通过 ...