性能优化
文章平均质量分 92
發糞塗牆
MVP, TOGAF, MCSE, Azure Solution Architect
展开
-
【Azure Data Platform】Azure SQLDW 结果集缓存
result-set cache原创 2022-03-31 19:25:52 · 853 阅读 · 0 评论 -
【Azure Data Platform】Dedicated SQL Pool——导入性能测试(2)——CTAS
本文属于【Azure Data Platform】系列。接上文:【Azure Data Platform】Dedicated SQL Pool——导入性能测试(1)——传统insert本文介绍SQL DW,也称Synapse Analysis,或者最新的Dedicated SQL Pool的外部导数工具的对比。--CREATE TABLE [dbo].test_robin_heap_ctasWITH (DISTRIBUTION = ROUND_ROBIN,HEAP)ASSELECT * .原创 2022-03-19 15:24:07 · 628 阅读 · 0 评论 -
【Azure Data Platform】Dedicated SQL Pool——导入性能测试(1)——传统insert
本文属于【Azure Data Platform】系列。接上文:【Azure Data Platform】使用Azure Blob Storage Lifecycle Management归档数据本文介绍SQL DW,也称Synapse Analysis,或者最新的Dedicated SQL Pool的外部导数工具的对比。前言项目从前年开始使用SQL DW(我还是习惯用这个术语)...原创 2022-03-17 19:17:01 · 626 阅读 · 0 评论 -
SQL Server On Linux(21)—— SQL Server On Linux性能(7)——性能进阶简介——分区(1)
本人新书上市,请多多关照:《SQL Server On Linux运维实战 2017版从入门到精通》本篇开始专门对性能进行一系列讲解,这一系列不限于Linux平台,更多的是针对SQL Server本身。SQL Server性能新特性 SQL Server发展至今,为了不断提升性能,引入了不少最新技术。它们主要以分区表/索引,In-Memory OLTP 和列存储索引这三类核心技术为主...原创 2020-01-15 15:29:03 · 657 阅读 · 0 评论 -
什么东西导致了执行计划的严重错误——需要更新统计信息吗?
原文出处:What caused that plan to go horribly wrong – should you update statistics? 由于本人确实遇到过这类问题,但是基于水平和经历,不打算重复造轮子,所以把大牛的文章翻译一下以供大家参考。以下是译文:过去几年里,我(作者)遇到这类情景: 有一个存储过程在大部分时间里面都运行得很好,但是突然就不行了。其性...翻译 2018-03-12 11:08:23 · 1682 阅读 · 0 评论 -
SQL Server性能优化案例分享(1)——CPU持续过高——CPU高使用率的常见原因及处理方向
本系列属于 SQL Server性能优化案例分享 专题 部分内容借用《SQL Server 2012实施与管理实战指南》P592,如果SQL Server错误日志里面并没有17883/17884这类错误,但是SQL Server CPU很高,那一般就是工作负载太高导致的。意味着SQL Server并没有什么大问题,但是很辛苦地在完成用户发过来的请求。 由于CPU较于内存、阻塞、磁盘等资...原创 2018-03-12 17:23:14 · 6561 阅读 · 0 评论 -
SQL Server新基数估量器
本系列属于 SQL Server性能优化案例分享 专题 当你使用SQL Server 2014及以上版本并且数据库的兼容级别为120或以上时,可能会有一个比较奇怪的现象,原本在SQL 2008/2012上运行正常的数据库,可能因为迁移到SQL Server 2014版本,在新环境突然变慢了。 一般来说,迁移/升级实例版本时,我们必不可少的工作有:备份、重建全库索引、全库更新统计信息。但...原创 2018-03-21 16:05:16 · 993 阅读 · 0 评论 -
SQL Server On Linux中的即时文件初始化
原创 2018-02-08 15:23:54 · 668 阅读 · 0 评论 -
SQL Server Table Spool优化
本系列属于 SQL Server性能优化案例分享 专题 在执行计划中出现的Spool操作符,往往都具有明显的性能问题,也意味着数据库的设计、编码等可能存在问题,所以本文专门介绍一下这个操作符。 Spool介绍 Spool是内存或者磁盘上的缓存(cache)或临时表。SQL Server用这个结构来提升在执行过程中需要多次执行的复杂的子表达式的性能。注意几个次:一次运行中多次执行、复...原创 2018-03-06 08:24:34 · 5498 阅读 · 0 评论 -
SQL Server Hash Warning 优化
本系列属于 SQL Server性能优化案例分享 专题 最近遇到服务器CPU持续居高问题,通过计数器的检查,初步断定存在语句性能问题,然后有针对性地抓取问题语句(来龙去脉将会在另外一篇文章解释,本文关注Hash Warning),其执行计划如下: 因为这是生产环境,所以下面例子把表名替换成A/B/C/D等表。代码很简单,大概样子如下:SELECT bo.Scode ,d.PCode ,...原创 2018-03-08 14:50:59 · 1293 阅读 · 0 评论 -
T-SQL执行内幕(7)——内存授予
本文属于SQL Server T-SQL执行内幕系列 前面提到,在执行过程中,很多操作符都需要内存来支持运作。比如Sort操作符,需要存储所有的输入以便进行排序,而Hash操作,为了创建大型的hash表,也需要申请资源来存储数据。 基于操作符的类型和预估的影响行数及列的大小(这些都可以从统计信息获得),执行计划可以知道这些操作符需要的大概内存。整个执行计划所需的内存总和称为内存授予(M...原创 2018-03-30 15:31:50 · 1036 阅读 · 0 评论 -
T-SQL执行内幕(11)——Read Ahead
本文属于SQL Server T-SQL执行内幕系列 每当操作读取页的数据,意味着这些数据需要固定到缓存(buffer pool)中。这个时候可能会导致操作被阻塞,因为当所需要的数据不在内存时,需要把数据从磁盘载入内存,这个时候操作需要等待页从磁盘搜索并载入内存。如果由于系统负担很重或者载入的量很大,磁盘I/O响应不及时,那么此时操作就会被阻塞(stall),性能将会暴跌。 从现实生...原创 2018-03-31 15:52:53 · 1670 阅读 · 1 评论 -
T-SQL执行内幕(10)——读取数据
本文属于SQL Server T-SQL执行内幕系列 关系型数据库的数据访问操作总是从内存的缓存中读取数据而不是从磁盘中读取。这个缓存称为Buffer Pool。如果数据访问操作符未能在缓存中找到所需的数据,那么就需要从磁盘中加载,这就会产生一个磁盘I/O读(set statistics io on中的物理读),并且需要等待这个物理读完成(及从磁盘找到数据并加载到缓存为止)之后,才能进行操作...原创 2018-03-31 15:39:06 · 1120 阅读 · 0 评论 -
T-SQL执行内幕(9)——数据访问
本文属于SQL Server T-SQL执行内幕系列 在执行树的叶子端(通常就是图形化执行计划每个分支的最右端),一般是实际访问数据的操作符。当调用这些操作符上的next()方法时,会返回表或者索引上的实际数据。数据访问通常有三类可能的操作符:Scan: 各类扫描,扫描操作会在数据上循环访问所有的行。它永远不会定位一个特定的行,取而代之的是扫描整个数据集。在执行计划中常见的扫描操作符有...原创 2018-03-31 15:14:04 · 923 阅读 · 0 评论 -
T-SQL执行内幕(8)——数据存储
本文属于SQL Server T-SQL执行内幕系列 前面提到了数据访问,那么如何访问?访问什么?为此必须介绍一下数据存储的概念。SQL Server以三种方式存储和组织数据:均可从sys.partitions中查到Heaps:堆,指没有聚集索引(注意主键并非一定是聚集索引)的表。另外诸如select …into … from …语句生成的表也是堆表。SQL Server堆结构 在sy...原创 2018-03-31 11:16:37 · 974 阅读 · 0 评论 -
T-SQL执行内幕(6)——返回结果
本文属于SQL Server T-SQL执行内幕系列 在执行引擎按照执行计划的要求把数据成功检索之后,就需要把数据返回给客户端。这里的结果不是单纯的数据库引擎完成查询数据之后的结果,而是客户端(如SSMS)接收到数据的结果。一旦数据已经“填满”执行树的各个操作符,那么最顶端的根操作符就会负责把数据写入网络缓存(network buffer)并把这些数据发送给客户端。 结果集并不是直接...原创 2018-03-28 15:54:10 · 1049 阅读 · 0 评论 -
T-SQL执行内幕(5)——执行
本文属于SQL Server T-SQL执行内幕系列 一旦优化器选择了开销最低的预估执行计划之后,就会把预估执行计划转换成实际执行树(Actual Execution Tree)进行查询执行。树的每个节点都是一个操作符。操作符及一系列的有向箭头(代表数据流的方向及结果集的数据量(箭头粗细)) 组成了整个执行计划,这里指的是图形化执行计划。 所有的操作符都实现一个具有三个方法(open...原创 2018-03-28 15:19:38 · 1151 阅读 · 0 评论 -
T-SQL执行内幕(4)——优化
本文属于SQL Server T-SQL执行内幕系列 接上文,当解析和编译完成后,请求的生命周期就进入下一步——优化(Optimisation)。在SQL语言中,优化的本质就是找最好的路线。意思是在多种可能的候选数据访问方式中选择最佳一个。比如两表关联的简单查询语句,每个表有1个索引,那么就有4种可能的数据访问方式(AB两表的索引扫描、AB两表的索引查找,A扫描B查找、A查找B扫描)。随着表...原创 2018-03-28 14:30:48 · 1408 阅读 · 0 评论 -
SQL Server 执行计划操作符详解(3)——计算标量(Compute Scalar)
接上文:SQL Server 执行计划操作符详解(2)——串联(Concatenation )原创 2016-01-06 17:27:42 · 7084 阅读 · 2 评论 -
T-SQL动态查询(3)——静态SQL
接上文:T-SQL动态查询(2)——关键字查询 本文讲述关于静态SQL的一些知识和基础技巧。简介: 什么是静态SQL?静态SQL是和动态SQL相对而言的,其实我们没必要过于纠结精确定义,只要大概知道什么算静态SQL即可。当一个语句特别是存储过程,语句不需要动态生成或拼接,除了参数之外我们都知道语句的最终形态时,就可以认为这是静态SQL,简单来说,我们大部分的处理动态查询条件的语句都属于静态SQ原创 2015-11-26 16:01:48 · 6890 阅读 · 0 评论 -
T-SQL动态查询(4)——动态SQL
接上文:T-SQL动态查询(3)——静态SQL 前言: 前面说了很多关于动态查询的内容,本文将介绍使用动态SQL解决动态查询的一些方法。 为什么使用动态SQL: 在很多项目中,动态SQL被广泛使用甚至滥用,很多时候,动态SQL又确实是解决很多需求的首选方法。但是如果不合理地使用,会导致性能问题及无法维护。动态SQL尤其自己的优缺点,是否使用需要进行评估分析:动态SQL优点:动态SQL提供了强大的扩原创 2015-12-09 09:38:17 · 13274 阅读 · 2 评论 -
SQL Server 索引维护(1)——如何获取索引使用情况
前言: 在前面一文中,已经提到了三类常见的索引问题,那么问题来了,当系统出现这些问题时,该如何应对? 简单而言,需要分析现有系统的行为,然后针对性地对索引进行处理:对于索引不足的情况:检查缺少索引的情况,也需要检查现有索引定义是否有问题。对于索引过多的情况:分析每一个索引的使用情况,判断是否有存在的必要或者可合并、可修改的可能。对于索引不合理的情况:也要分析每个索引的定义,及其使用情况,确定索引是原创 2015-11-09 12:57:32 · 11691 阅读 · 5 评论 -
T-SQL中的APPLY用法(半翻译)
本文接上文:T-SQL 中的CROSS JOIN用法(半翻译) 同样可用于微软认证70-461: Querying Microsoft SQL Server 2012考试的学习中。 ---------------------------------------------------------------------以下为译文-----------------------------------原创 2015-09-18 14:38:33 · 7179 阅读 · 0 评论 -
T-SQL 中的CROSS JOIN用法(半翻译)
今天来翻译一篇关于T-SQL的文章,本文可供微软认证70-461:QueryingMicrosoft SQL Server 2012的学习和练习之用。本文以翻译为主,引出个人工作中的一些思考,详见最后部分。 我会尽可能抽时间翻译本系列(见原文出处的相关链接,这是一系列的文章)的其他文章,除了回顾一些知识之外,重点是总结一下自己的所得。 -------------------------------原创 2015-09-15 13:09:07 · 7728 阅读 · 0 评论 -
简译《Dissecting SQL Server Execution Plans》——连载总入口
转载请注明出处 由于工作及学习需要,最近看了一下《Dissecting SQL Server Execution Plans》,这是少有的专门描述执行计划的优秀书籍,为了快速查找并供入门同行学习,粗略翻译了本书,并进行连载,由于专业及英语水平严重不足,所以建议有兴趣有能力的读者看原书,同时期待各位指出翻译不足。下载地址:点击打开链接 本文是一个总入口,方便阅读,共8章,翻译 2013-06-19 23:58:03 · 3338 阅读 · 2 评论 -
第十六章——处理锁、阻塞和死锁(2)——侦测阻塞和阻塞查询
前言:如果一个事务正在等待一些给其他事务锁定的资源。这个事务就被成为“被阻塞的事务”。反过来,引起阻塞的事务,也就是锁定资源并造成其他事务等待的事务叫做“正在阻塞的事务”。长时间运行事务会阻塞其他事务和查询,使他们等待长时间。在繁重的系统中,很多时候我们会遇到阻塞问题,如果一个事务因为阻塞未完成。会造成一些列的等待链。本文将介绍如何发现并马上解决这方面的问题。 准备工作:本翻译 2013-03-20 17:34:40 · 6872 阅读 · 2 评论 -
第十六章——处理锁、阻塞和死锁(3)——使用SQLServer Profiler侦测死锁
前言:作为DBA,可能经常会遇到有同事或者客户反映经常发生死锁,影响了系统的使用。此时,你需要尽快侦测和处理这类问题。死锁是当两个或者以上的事务互相阻塞引起的。在这种情况下两个事务会无限期地等待对方释放资源以便操作。下面是死锁的示意图:本文将使用SQLServer Profiler来跟踪死锁。 准备工作:为了侦测死锁,我们需要先模拟死锁。本例将使用两个不翻译 2013-03-20 17:54:08 · 15443 阅读 · 9 评论 -
第四章——SQLServer2008-2012资源及性能监控(1)
性能优化的第一步是发现问题,而发现问题通常又有两类:突发问题的侦测和常规问题的侦测,对于常规问题的侦测,通常需要有一个长效的性能监控作为依据。 本系列文章介绍服务器性能监控CPU使用率监控内存使用率监控 前言: 当由于劣质的查询写法、缺失必要的索引或者数据库级别的其他情况所导致的性能问题时,可以通过使用执行计划、DMVs/DMFs、SQL Trace或者数据翻译 2013-02-26 17:44:44 · 21717 阅读 · 2 评论 -
SQLServer RESOURCE_SEMAPHORE 等待状态
概述: 当一个SQLServer实例运行得很慢的时候,应该做一些检查,如检查等待状态。最好的方法是一开始就建立一个性能基线,以便做性能对比。当发现与性能基线对比后,存在内存压力的话,就要找出是什么原因导致的。可以检查事务的等待状态,其中Resource_semaphore等待可能出现最多。下面是如何去处理这个问题: 当检查事务的所有等待类型后,可能会发现R原创 2013-01-06 23:12:50 · 7921 阅读 · 0 评论 -
SQL Server 执行计划操作符详解(1)——断言(Assert)
前言: 很多很多地方对于语句的优化,一般比较靠谱的回复即使——把执行计划发出来看看。当然那些只看语句就说如何如何改代码,我一直都是拒绝的,因为这种算是纯蒙。根据本人经验,大量的性能问题单纯从语句来看很难发现瓶颈,同一个语句,由于环境的不同,差距非常大,所以比较合适的还是分析执行计划。 那么对于执行计划,一般使用图形化执行计划就差不多了,但是用过的人也有一些疑惑,里面的图标(称为操作符)并不非常原创 2015-12-11 14:38:43 · 12218 阅读 · 4 评论 -
T-SQL动态查询(2)——关键字查询
接上文:T-SQL动态查询(1)——简介 前言: 在开发功能的过程中,我们常常会遇到类似以下情景:应用程序有一个查询功能,允许用户在很多查询条件中选择所需条件。这个也是本系列的关注点。 但是有时候你也许会发现,有些条件或多或少是互相排斥的。比如用户通过下面其中一个条件查找信息:1. 客户名2. 客户ID3. 客户身份标识号(如国内身份证、美国社保号等)。 并且这三列上都有适当的索引。本系列主原创 2015-11-19 16:39:43 · 5789 阅读 · 2 评论 -
T-SQL执行内幕(3)——解析和编译
本文属于SQL Server T-SQL执行内幕系列 接上文,当请求被任务接收同时得到工作线程指派执行后,就开始在SQL Server内部进行运作。当请求被执行时,第一步就是要先解析(Parsing)请求,把TDS数据流转换成SQL Server可识别的格式。 从客户端发送的是T-SQL文本,然后转换成TDS数据流,到达SQL Server之后变回T-SQL文本。但是由于纯T-SQL文...原创 2018-03-23 16:53:32 · 1333 阅读 · 0 评论 -
T-SQL执行内幕(1)——简介
本文属于SQL Server T-SQL执行内幕系列前言: 本文主体内容来自于:http://rusanu.com/2013/08/01/understanding-how-sql-server-executes-a-query/但是经常打不开,本人又在:https://www.codeproject.com/Articles/630346/Understanding-how-SQL-Ser...原创 2018-03-23 14:54:46 · 2673 阅读 · 0 评论 -
T-SQL执行内幕(2)——Tasks、Workers、Threads、Scheduler、Sessions、Connections、Requests
本文属于SQL Server T-SQL执行内幕系列 接上文:T-SQL执行内幕(1)——简介 本节以介绍一些基础的但又容易混淆的概念。包括:Tasks、Workers、Threads、Scheduler、Sessions、Connections、RequestsScheduler:计划程序,特指SQL OS的Scheduler,用于管理SQL Server中的线程调度的对象,每个计划...原创 2018-03-23 14:57:08 · 1323 阅读 · 0 评论 -
理解性能的奥秘——应用程序中慢,SSMS中快(4)——收集解决参数嗅探问题的信息
本文属于《理解性能的奥秘——应用程序中慢,SSMS中快》系列 接上文:理解性能的奥秘——应用程序中慢,SSMS中快(3)——不总是参数嗅探的错翻译 2016-11-22 11:50:01 · 5482 阅读 · 1 评论 -
理解性能的奥秘——应用程序中慢,SSMS中快(5)——案例:如何应对参数嗅探
本文属于《理解性能的奥秘——应用程序中慢,SSMS中快》系列 接上文:理解性能的奥秘——应用程序中慢,SSMS中快(4)——收集解决参数嗅探问题的信息翻译 2016-11-28 15:42:31 · 6925 阅读 · 0 评论 -
理解性能的奥秘——应用程序中慢,SSMS中快(3)——不总是参数嗅探的错
本文属于《理解性能的奥秘——应用程序中慢,SSMS中快》系列 接上文:理解性能的奥秘——应用程序中慢,SSMS中快(2)——SQL Server如何编译存储过程 在我们开始深入研究如何处理参数嗅探相关的性能问题之前,由于这个课题过于广泛,所以首先先介绍一些跟参数嗅探没有直接关系的内容,但是又会导致语句在SSMS和应用程序中存在性能差异的情况。替换变量和参数: 前面已经接触过,但是在这里对其进行扩...翻译 2016-11-17 10:49:30 · 4930 阅读 · 1 评论 -
理解性能的奥秘——应用程序中慢,SSMS中快(2)——SQL Server如何编译存储过程
本文属于《理解性能的奥秘——应用程序中慢,SSMS中快》系列 接上文:理解性能的奥秘——应用程序中慢,SSMS中快(1)——简介 本文介绍SQL Server如何编译存储过程并使用计划缓存。如果你的应用程序完全没有用到存储过程,而是直接使用SQL语句提交请求,那么本文大部分内容也是有效的。但是关于动态SQL的编译会在后面章节介绍,这里重点关注让人头痛的存储过程问题。什么是存储过程? 虽然这个问题有...翻译 2016-11-15 10:38:44 · 6932 阅读 · 0 评论 -
理解性能的奥秘——应用程序中慢,SSMS中快(1)——简介
在工作中发现有不少类似的现象,有幸看到国外大牛写的一篇文章,由于已经完善得不能再添油加醋,所以决定直接翻译,原文出处:http://www.sommarskog.se/query-plan-mysteries.html#defaultsettings 本人水平有限,如果读者觉得自己英语过得去,建议阅读原文。在翻译过程中,不排除会对某些部分进行修改,但不会影响最终效果。 由于内容较多,所以把文章拆翻译 2016-11-14 23:24:30 · 4549 阅读 · 0 评论 -
理解性能的奥秘——应用程序中慢,SSMS中快(6)——SQL Server如何编译动态SQL
本文属于《理解性能的奥秘——应用程序中慢,SSMS中快》系列接上文:理解性能的奥秘——应用程序中慢,SSMS中快(5)——案例:如何应对参数嗅探翻译 2016-11-30 16:41:36 · 6526 阅读 · 1 评论