muugua 发表于 2018-10-21 09:05:25

SQL Server 2008 基础

  SQL Server 2008 基础
  SQL流程

  TDS是一种协议,一系列描述两个计算机间如何传输数据的规则。象别的协议一样,它定义了传输信息的类型和他们传输的顺序。总之,协议描述了“线上的位”,即数据如何流动。表格数据流协议是建立在TCP/IP Net-Library之上的,包含在TCP数据段内。TDS用1433端口进行数据库通信。
  TDS协议位于TCP的数据段内,结构如下:
  IP
  TCP
  TDS头
  TDS的DATA段
  8位头
  TDS客户端使用称为表格格式数据流 (TDS) 的 SQL Server 专用应用程序级协议来发送 SQL 语句。数据包由用于 SQL Server 的 Microsoft OLE DB 提供程序、SQL Server ODBC 驱动程序或 DB-Library DLL 生成。TDS 数据包然后被传递给 SQL Server 客户端 Net-Library,客户端 Net-Library 将 TDS 数据包封装为网络协议数据包。在服务器上,服务器 Net-Library 接收网络协议数据包,且析取 TDS 数据包并将其传递给关系数据库服务器。在将结果返回给客户端时,这一进程反向执行。
  表格数据流端点:一个网络协议一旦连接成功,就会创建一个对应的TDS端点,用于在客户端与服务器之间互传信息
  对于这一步,性能问题可能会出现在把请求的内容转换成SQL Server能处理的格式的过程中,如果数据量大,转换开销就高,不管是从外部传入SQL Server还是从SQL Server输出到外部,都是如此
  命令解释器:在TDS把请求转换成SQL Server内部可识别的格式后,首先会传到命令解释器处,这个组件会检查传入的T-SQL语法是否符合规定。如果语法符合要求,就好生成查询树传入查询优化器中
  命令解释器同时也会检查是否已经存在缓存了的执行计划,如果存在,就重用;如果不存在,就让查询优化器生成执行计划
  查询优化器:该组件是SQL Server的核心部分,优化器的作用是对特定的请求进行一系列的优化,使其尽可能高效地对数据进行操作,最终选择最低开销的候选计划生成预估执行计划,并传入执行器执行查询.
  查询执行器:查询执行器是执行查询的组件,但是实际上并不是真正执行,而是通过OLEDB协议访问并使用一系列的指令操作存储引擎进行查询的执行操作。存储引擎才是实际的查询执行者
  数据访问方法:数据访问方法是提供数据和索引的存储、查询及修改的代码集合。它包含了索引操作数据的代码,但是并不由自己去数据操作数据,而是提交请求到缓冲管理器
  缓冲区管理器:缓冲管理器是管理BufferPool的组件。Buffer Pool是SQL Server内存的主要部分,它管理内存中的数据,并把适当的数据作为输出传输给(数据访问方法)。如果所需数据不在于内存中,缓冲管理器需要从磁盘读取对应的数据页到内存的数据缓存,然后把所需的数据返回给数据访问方法。在这个过程中可能会出现一种等待状态PageIOLatch
  数据缓存:数据缓存是BufferPool中的最大部分,也可以说是SQL Server中占用内存最多的部分。它用于存放从磁盘加载到内存中的数据,以便后续操作使用
  对于当前数据缓存中每个数据库的缓存大小情况。可以使用一个DMV来查询
  ——sys.dm_os_buffer_descriptors

  SELECT COUNT(*) * 8 / 1024 AS 'Cached>  CASE database_id
  WHEN 32767 THEN 'ResourceDb'
  ELSE DB_NAME(database_id)
  END AS 'Database'
  FROM sys.dm_os_buffer_descriptors
  GROUP BY DB_NAME(database_id) , database_id

  ORDER BY 'Cached>  事务管理器
  事务管理器主要包含两部分:锁管理器和日志管理器
  1、锁管理器通过使用锁机制来保证数据的并发性和隔离性。
  2、日志管理器通过预写入日志机制,保证事务的ACID特性当需要修改数据时,数据访问方法会先到事务管理器中通过对事务日志进行操作,把请求传到Buffer管理器中完成,然后返回给数据访问方法并通过事务管理器写入日志文件中
  数据库事务
  事务是对数据库操作的工作单元,这个单元可以是一个select语句,也可以是包含多个select、update、dalete、insert等操作的命令集合。这个集合被认为是工作单元,SQL SERVER的很多特性都是基于这个工作单元,也就是事务
  关系数据库包含4大核心事务特性:原子性、一致性、隔离性和持久性,简称ACID特性
  1、原子性
  原子性意味着一个事务内的所有操作必须全部完成或者全部回滚。典型的例子是在ATM机上操作时,要么取钱、存钱或者转账成功,要么等于从来都没有做过任何操作。如果转账成功但是对方未收到款项,势必造成很大问题
  2、一致性
  一致性要求整个事务在运行的前后数据库的状态是一致的,比如库存不能为负值、性别字段的值要么为“男”要么为“女”等。为了确保事务的一致性,事务不能打破数据定义中的一致性约束
  3、隔离性
  隔离性保证在同一时间中,一个事务的运行不能被另外一个事务所影响。但是SQL Server实际是允许这个操作的
  4、持久性
  持久性意味着事务一旦成功提交,将永久存储到服务器的文件系统中,即使系统在中途崩溃,所发生的效果都不会丢失,这个会通过日志来保证
  提交事务意味着永久把事务的影响记录到数据库中,回滚意味着把发生的所有操作去除,等于没有做过,不过日志其实还是会记录这个操作

  关系引擎和存储引擎是SQLServer的两大组件
  1、关系引擎,也叫查询处理器,因为它的主要作用是优化和执行查询。关系引擎中包含的命令解析器用于检查语法和转换查询树,而查询优化器则用于优化查询,还有一个查询执行器负责执行查询
  2、存储引擎,负责管理所要数据及涉及的I/O,其中包含的数据访问方法用于处理对行、索引、也、行版本、空间分配等的I/O请求,缓冲区管理器用于管理SQL Server的主要内存消耗组件——Buffer Pool,事务管理器将通过所管理数据及维护事务的ACID属性
  缓冲池:在数据库性能及管理领域中属于相当重要的一个组件,也是SQL Server中内存消耗最大的组件。缓冲池包含了SQL Server的所有缓存,如计划缓存和数据缓存等
  下面是逻辑CPU 格式在不同位数的操作系统中
  能支持的最大工作者线程数。
  1)对于32 位操作系统:
  总可用逻辑CPU4 时,最大工作者线程=256+((逻辑CPU-4)×8)。
  2)对于64 位操作系统:
  总可用逻辑CPU4 时,最大工作者线程=512+((逻辑CPU-4)×16)。
  还有一个比较简单的方法可用于检查当前系统的最大线程数。比如执行下面的脚本:
  SELECT max_workers_count
  FROMsys.dm_os_sys_info
  通常出现threadpool 类型的等待意味着当前有大量并行执行计划,或者遇到了CPU 瓶
  颈,但是不管是什么情况,都需要经常检查这部分的数据,以确保有足够的线程可用对
  于每个工作线程,在64 位系统中都要消耗2MB 的内存,在32 位系统需要消耗0.5MB 的
  内存,所以SQL Server 只会在需要的时候才创建工作线程。这部分的信息可以通过sys.
  dm_os_workers 这个DMV 来查看。
  SELECT COUNT(*)
  FROMsys.dm_os_workers
  SQL Server NUMA CPU 配置
  SELECT scheduler_id ,
  cpu_id ,
  parent_node_id ,
  status
  FROM sys.dm_os_schedulers
  当前已缓存的计划数及所占的MB 数
  SELECT COUNT(*) AS 'Number of Plans' ,

  SUM(CAST(size_in_bytes AS BIGINT)) / 1024 /1024 AS 'Plan Cache>  FROM sys.dm_exec_cached_plans
  查看缓存对象的对应内存数
  SELECT objtype AS 'Cached Object Type' ,
  COUNT(*) AS 'Number of Plans' ,

  SUM(CAST(size_in_bytes AS BIGINT)) / 1024 /1024 AS 'Plan Cache>  AVG(usecounts) AS 'Avg Use Count'
  FROM sys.dm_exec_cached_plans
  GROUP BY objtype
  查询数据库路径
  USE master
  go
  SELECT physical_name
  FROM   sys.master_files
  WHEREdatabase_id = DB_ID('RJBDB')
  检查证书
  select name, start_date, expiry_date
  from sys.certificates
  where name not like '##%'
  查看镜像端点
  SELECT * FROM sys.endpoints e
  查询镜像状态
  select *
  from sys.database_mirroring
  where database_id=DB_ID('RJBDB')

页: [1]
查看完整版本: SQL Server 2008 基础