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)

请求的状态。  可以是以下值:

  • 背景
  • 正在运行
  • 可运行
  • Sleeping
  • 挂起

不可为 null。

command

nvarchar(32)

标识正在处理的命令的当前类型。  常用命令类型包括:

  • SELECT
  • INSERT
  • UPDATE
  • DELETE
  • BACKUP LOG
  • BACKUP DATABASE
  • DBCC
  • FOR

可通过结合使用 sys.dm_exec_sql_text 和请求对应的 sql_handle 来检索请求的文本。  内部系统进程将基于它们所执行任务的类型来设置该命令。  这些任务可以包括:

  • LOCK MONITOR
  • CHECKPOINTLAZY
  • WRITER

不可为 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

为以下命令完成的工作的百分比:

  • ALTER INDEX REORGANIZE
  • AUTO_SHRINK 选项(带 ALTER DATABASE)
  • BACKUP DATABASE
  • DBCC CHECKDB
  • DBCC CHECKFILEGROUP
  • DBCC CHECKTABLE
  • DBCC INDEXDEFRAG
  • DBCC SHRINKDATABASE
  • DBCC SHRINKFILE
  • RECOVERY
  • RESTORE DATABASE,
  • ROLLBACK
  • TDE ENCRYPTION

不可为 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客户端请求的更多相关文章

  1. SQL Server 磁盘请求超时的833错误原因分析以及解决

    本文出处:http://www.cnblogs.com/wy123/p/6984885.html 最近遇到一个SQL Server服务器响应极度缓慢,并且出现客户端请求报错的情况,在数据库中的erro ...

  2. SQL Server客户端登录名与数据库用户关联

    数据库迁移之后,在新的SQL Server客户端工具设置关联时,往往会报错: 用户.组或角色 'XXX' 在当前数据库中已存在. 解决方法: 首先介绍一下sql server中“登录”与“用户”的区别 ...

  3. SQL Server客户端工具到底使用的是哪个provider呢?

    SQL Server客户端工具到底使用的是哪个provider呢? 转载自:http://blogs.msdn.com/b/apgcdsd/archive/2013/01/10/sql-server- ...

  4. SQL SERVER HTTP请求

    --开启Sql Server 通讯配置-- sp_configure ; GO RECONFIGURE WITH OVERRIDE; GO sp_configure ; GO RECONFIGURE ...

  5. SQL Server 查询请求

    当SQL Server 引擎接收到用户发出的查询请求时,SQL Server执行优化器将查询请求(Request)和Task绑定,并为Task分配一个Workder,SQL Server申请操作系统的 ...

  6. Arcgis连接SQL Server提示试图使用不支持的旧版SQL Server客户端通信软件进行连接

    一般提示这种错误的是arcgis服务区和SQL server服务器不在同一台电脑上,但在同一个局域网. 遇到这种问题是arcgis 服务器客户端连接SQL server数据库有问题,要么是客户端没有安 ...

  7. SQL SERVER 2005 请求失败或服务未及时响应

    出现的问题如图所示,在开始->程序->Microsoft SQL Server 2005->配置工具->SQL Server Configuration Manager中,打开 ...

  8. SQL Server(MSSQLSERVER) 请求失败或服务未及时响应,有关详细信息,请参见事件日志或其他的适用的错误日志。

    转自:https://www.fengjunzi.com/blog-25573.html 问题 有时候sqlserver无法启动了,原因是mssqlserver服务没有启动,当你手动启动时,又出现服务 ...

  9. 当您尝试从 64 位 SQL Server 客户端上运行分布式的查询到链接的 32 位 SQL Server 时,您可能会收到一条错误消息

    如何处理64位SQL访问32位SQL执行脚本语句问题 链接服务器"SERVER_YBJK"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 &qu ...

随机推荐

  1. 《SQL必知必会》学习笔记(一)

    这两天看了<SQL必知必会>第四版这本书,并照着书上做了不少实验,也对以前的概念有得新的认识,也发现以前自己有得地方理解错了.我采用的数据库是SQL Server2012.数据库中有一张比 ...

  2. web页面之响应式布局

    一.什么是响应式布局? 响应式布局是Ethan Marcotte在2010年5月份提出的一个概念,简而言之,就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本.这个概念是为解决移动互联网 ...

  3. 20145212——GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 测试代码 #include <stdio.h> short val = 1; int vv = 2; int g(int xxx) { return xxx + ...

  4. c语言一些知识点的记录

    1.extern关键字 extern关键字可以置于变量或者函数前面,用于告诉编译器此变量或函数定义于其他的模块.

  5. 室内定位系列(二)——仿真获取RSS数据

    很多情况下大家都采用实际测量的数据进行定位算法的性能分析和验证,但是实际测量的工作量太大.数据不全面.灵活性较小,采用仿真的方法获取RSS数据是另一种可供选择的方式.本文介绍射线跟踪技术的基本原理,以 ...

  6. 360浏览器遇到文档模式是IE7的解决办法

    这段时间遇到了360浏览器在加载java项目时,默认的文档模式是IE7,使得网页加载下拉框出现问题. 解决的方法是: 在显示的jsp页面加上 <meta http-equiv="X-U ...

  7. 【09-26】hibernate学习笔记

    主键生成策略 @Id //根据底层数据库决定,mysql-->auto_increment @GeneratedValue(strategy=GenerationType.AUTO) //使用数 ...

  8. HTTPS 双向认证构建移动设备安全体系

    HTTPS 双向认证构建移动设备安全体系 对于一些高安全性要求的企业内项目,我们有时希望能够对客户端进行验证.这个时候我们可以使用Https的双向认证机制来实现这个功能. 单向认证:保证server是 ...

  9. DataGrid控件使用

    应用Binding显示后台数据 <UserControl x:Class="demo03.View.UserInfoList"             xmlns=" ...

  10. web加密的基本概念

    1.需求 了解web加密的一些基础概念. 2.基本概念 a.对称加密方式 对称加密方式 加密和解密用同一个密钥 不足之处是,交易双方都使用同样钥匙,安全性得不到保证.此外,每对用户每次使用对称加密算法 ...