加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

浅谈SQL Server内部运行机制

发布时间:2019-01-18 07:27:04 所属栏目:编程 来源:Alan_beijing
导读:对付已经很认识T-SQL的读者,可能对付较专业的DBA来说,逻辑的增编削查,可能较伟大的SQL语句,都长短常简朴的,不存在任何挑衅,不值得一提,那么,SQL的哪些方面是他们的挑衅 可能软肋呢? 那就是sql优化。然而,要想成为一个好的Sql优化好手,起主要做的
副问题[/!--empirenews.page--]

对付已经很认识T-SQL的读者,可能对付较专业的DBA来说,逻辑的增编削查,可能较伟大的SQL语句,都长短常简朴的,不存在任何挑衅,不值得一提,那么,SQL的哪些方面是他们的挑衅 可能软肋呢?

那就是sql优化。然而,要想成为一个好的Sql优化好手,起主要做的一件事无疑就是相识sql语句在SQL Server中是怎样执行的。在这一系列中,我们将开始sqlserver优化系列讲授,本讲为优化系列的开篇文章,在本篇文章中,我们将重点讲授SQL Server系统布局。

在正式讲授之前,我们先来看看如下题目,你是否碰着过,若你碰着过且乐成办理,那么这篇文章,你可以跳过。

为了测试必要,我们先模仿插入5亿3千多万条数据。

  1. SELECT COUNT(1) FROM BigDataTest 

浅谈SQL Server内部运行机制

(一)查询迟钝题目

*,姑且表,表毗连,子查询等造成的查询迟钝题目,你能办理吗?

(二)内存走漏

如下查询了8分2秒,然后内存溢出,你知道题目吗?

  1. SELECT * FROM BigDataTest 

浅谈SQL Server内部运行机制

(三)常常传闻如下观念,你都能办理吗?

事宜与锁(请参考我另一篇文章:浅谈SQL Server事宜与锁(上篇)https://www.cnblogs.com/wangjiming/p/8396986.html,ACID,断绝级别,脏读,分表分库,程度拆分,垂直拆分,高并发等

一、SQL Server系统布局抽象

浅谈SQL Server内部运行机制

二、SQL Server系统布局概述

SQL Server焦点系统布局,大抵包罗六大部门:客户端会见器材、SQL Server 收集接口(SQL Server Network Interface,SNI)、相关引擎、存储引擎、

磁盘缓和冲池。下图为SQL Server焦点系统大抵外观图。

浅谈SQL Server内部运行机制

(一)SQL Server客户端会见器材

浅谈SQL Server内部运行机制

SQL Server客户端会见器材,提供了长途会见技能,它与SQL Server处事端基于必然的协议,使其可以或许长途会见数据库,就像在当地操纵数据库一样,如我们常常用的

Microsoft SQL Server Management Studio。

SQL Server客户端会见器材是较量多的,个中较量风行的要数Microsoft SQL Server Management Studio 和Navicat(Navicat在MySQL中也是较量常用的)了,至于其他器材,本篇文章就不罗列了,感乐趣的读者伴侣,可以查询一下。

(二)SQL Server收集协议

浅谈SQL Server内部运行机制

SQL Server收集协议,又叫SQL Server收集接口(SNI),它是组成客户端和处事端通讯的桥梁,它与SQL Server处事端基于必然协议,方可通讯,如我们在客户端输入一条查询语句SELECT * FROM BigDataTest,这条语句,只有客户端和处事端基于必然协议,方可被处事端理会,不然,被视为无效语句。

SQL Server收集协议,由一组API组成,这些API供SQL Server数据库引擎和SQL Server当地客户端挪用,如实现最根基的CRUD通讯。

SQL Server 收集接口(SQL Server Network Interface,SNI)只必要在客户端和处事端设置收集协议即可,它支持一下协议:

(1)共享内存

(2)TCP/IP

(3)定名管道

(4)VIA

(三)相关引擎

浅谈SQL Server内部运行机制

相关引擎,也叫查询引擎,其首要成果是认真处理赏罚SQL语句,其焦点组件由三部门构成:呼吁说明器、查询优化器和查询执行器。

(1)呼吁说明器:认真理会客户端转达过来的T-SQL语句,如客户端转达一条SQL语句:SELECT * FROM BigDataTest,它会搜查该语句的语法布局,若语法

错误,它会将错误返回给协议层,然后协议层将错误返回给客户端;假如语法布局正确,它会按照查询呼吁天生查询打算或探求一个已存在的查询打算(先在缓冲池打算缓存中查找,若找到,则直接给查询执行器执行,若未找到,则会天生基于T-SQL的查询树,然后交给查询优化器优化)

(2)查询优化器:认真优化呼吁理会器天生的T-SQL查询树(基于资源的优化,而非基于时刻的优化),然后将最终优化功效转达给查询执行器执行。查询优化器是基于

“资源开销”的优化器,这种算法评估多种可执行的查询方法,并从中选择开销最低的方案作为优化功效,然后将该功效天生查询打算输出给查询执行器。留意,查询优化器是“基于资源开销最优”而非“基于方案最优”,也就是,查询优化器的最终优化功效未必是最好的方案,但必然是资源开销最低的方案。

(3)查询执行器:认真执行查询。假使查询执行器吸取到呼吁理会器或查询优化器转达过来的SQL语句:SELECT * FROM BigDataTest,它通过OLE DB接口转达到存储引擎,再转达到存储引擎的会见要领。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读