列存储
發糞塗牆
MVP, TOGAF, MCSE, Azure Solution Architect
展开
-
SQL Server 列存储索引性能总结(12)——RESOURCE_SEMAPHORE 等待
在SQL Server 列存储索引性能总结(10)——行组的大小影响一文中,实验过程当把服务器的max server memory(MB)值调到300MB并创建聚集列存储所以时,整整跑了5个小时都还没完成,然后查看对应的会话阻塞情况,发现了这个我过去很少见到过的等待状态,所以找了一些资料了解一下。当然,光从行为上,我大概能猜出是内存不够的原因,但是还是需要了解一下具体情况。背景 在 “S...原创 2020-03-23 11:56:19 · 1278 阅读 · 0 评论 -
SQL Server 列存储索引性能总结(11)——列存储的维护
接上文:SQL Server 列存储索引性能总结(10)——行组的大小影响索引需要维护,这个不多说,而维护通常就是两种:重建和重组。在一些可控的环境下(比如自己的机房),我选择使用Ola Hallengren的一整套维护脚本。非常好用。不过对于类似PaaS平台的SQL Server,可控性很弱,可能需要自己开发。但是这个不是本文的主题。本文介绍并演示重组和重建。如何选择重组和重建重组 ...原创 2020-03-23 09:57:21 · 1063 阅读 · 1 评论 -
SQL Server 列存储索引性能总结(10)——行组的大小影响
我们知道,为了更好的性能,行组(row group)的大小最好是1045678行,或者小于10万行。如果没有办法达到最佳大小,在读取大量数据的时候,就很难用到列存储的优点。在列存储索引中,最重要的概念就是行组和片段,它们分别代表了数据存储在行存储和列存储中。在片段中,不管你存了1行还是100万行数,读取的时候都是每个页或者区来读取,所以如果行数太少,是挺浪费的。如果对未排序的列使用筛选条件,那...原创 2020-03-22 18:49:45 · 1424 阅读 · 1 评论 -
SQL Server 列存储索引性能总结(9)——重建和重组聚集列存储索引所需的内存
接上文SQL Server 列存储索引性能总结(8)——列存储中的Dictionary,本文演示一下创建或重建及重组列存储索引时所需要的内存,因为在SQL Server 列存储索引性能总结(5)——列存储等待信息中我们也看到了如果内存不足,会出现不少等待。背景 在数据导入列存储索引后,通常还会有不少行组没有被压缩,甚至全部没有被压缩,这个时候除了Tuple Mover之外,还可以通过...原创 2020-03-21 23:07:15 · 1269 阅读 · 0 评论 -
SQL Server 列存储索引性能总结(8)——列存储中的Dictionary
接上文:SQL Server 列存储索引性能总结(7)——导入数据到列存储索引的Delta Store,前面提到了几次Dictionary,本文快速介绍一下它到底是什么,以便更好地理解列存储。不过这部分不会讲太深入,因为这个功能只能用于SQL Server而不适用于SQL DB和SQL DW(现在称为Azure Synapse Analytics)环境 本文继续使用ContosoRe...原创 2020-03-20 10:13:26 · 1217 阅读 · 0 评论 -
SQL Server 列存储索引性能总结(7)——导入数据到列存储索引的Delta Store
列存储索引有推荐的最佳导入行数,过小会导致数据先进入Delta Store(行组,row group),这个是行存储的B 树结构,然后通过Tuple Mover对数据进行编码和压缩最终成为片段(segment),这时候才能说进入了真正的列存储索引中,才能真正发回去列存储索引的优势。在我目前的项目中,导入数据是个头痛的事情,数据量不是非常大,但是表的列很多,4~500列。...原创 2020-03-19 16:16:48 · 1221 阅读 · 0 评论 -
SQL Server 列存储索引性能总结(6)——聚集和非聚集列存储索引的压缩
接上文:SQL Server 列存储索引性能总结(5)——列存储等待信息,前面的文章主要集中在聚集列存储上,下面也是时候引入一下费聚集列存储索引的内容。 这篇文章集中在不同列存储索引的“压缩”上面。还是使用ContosoRetailDW库做演示。对比一下两种列存储索引的压缩效率,其实我们应该已经知道结论了,不过不妨再看看过程。 本文选择四个不同数据量,列也不相同的表做对比,尽可能覆...原创 2020-03-18 20:41:53 · 1080 阅读 · 0 评论 -
SQL Server 列存储索引性能总结(5)——列存储等待信息
接上文:SQL Server 列存储索引性能总结(4)——列存储压缩,本文介绍列存储相关的锁 上周六,我在加班,为公司的Azure SQL DB测试聚集列存储索引,按照网上的说法,对堆表建立聚集列存储索引应该很快的,何况我使用的是SQL DB中最高I/O的Pricing Tier——Business Critical vCore 80,号称IOPS 可达204800,Log的吞吐量也可以...原创 2020-03-18 20:18:23 · 1187 阅读 · 0 评论 -
SQL Server 列存储索引性能总结(4)——列存储压缩
接上文:SQL Server 列存储索引性能总结(3)——列存储的锁,列存储的其中一个强项在于非常高的压缩率,如果没有这个压缩功能,列存储不可能有极大的性能提升。本文就来演示一下压缩方面的内容。案例测试 压缩率高不高直接看大小的变化已经足够了,这次我们使用ContosoRetailDW库的FactOnlineSales表,这个表有1200万数据,可以作为一个借鉴,我们先把数据挪到一个堆...原创 2020-03-14 16:41:52 · 1175 阅读 · 0 评论 -
SQL Server 列存储索引性能总结(3)——列存储的锁
接上文:SQL Server 列存储索引性能总结(2)——获取元数据信息,本文介绍列存储相关的锁 现在在TempDB中重新建表:IF OBJECT_ID('dbo.CCTest', 'U') IS NOT NULL drop table dbo.CCTest;create table dbo.CCTest( id int not null, name varchar(50) ...原创 2020-03-12 16:28:36 · 585 阅读 · 0 评论 -
SQL Server 列存储索引性能总结(2)——获取元数据信息
接上文:SQL Server 列存储索引性能总结(1)——环境准备及简介, 本文介绍怎么获取和解读元数据信息,以便后续演示过程能知道内幕技术,也可以方便在日常工作中的TroubleShooting。环境准备 我们先创建一些环境,然后一边演示一边介绍,为了不受示例数据库的影响,这次在TempDB上面运行。 创建测试表加聚集列存储索引,然后循环插入240万行数据:--use Tem...原创 2020-03-12 16:26:12 · 557 阅读 · 0 评论 -
SQL Server 列存储索引性能总结(1)——环境准备及简介
列存储是从SQL 2012引入,并在后面发挥非常大性能提升的功能,因为当前工作过程需要使用,并且已经出现了很多问题,所以这里我打算把这两个月的经验总结和分享一下。这个系列跟前面的有些类似,但是我希望能够把零碎的知识点合在一个系列中,最起码方便自己以后搜索。环境准备 本文会使用SQL Server On Linux环境,不过这个问题不大,SQL Server 使用2019版本。 ...原创 2020-03-12 16:22:03 · 794 阅读 · 0 评论 -
SQL Server On Linux(27)——SQL Server on Linux 性能(11)——列存储索引案例
本人新书上市,请多多关照:《SQL Server On Linux运维实战 2017版从入门到精通》接上文:SQL Server On Linux(26)——SQL Server on Linux 性能(10)——列存储索引简介这次来做一个简单的实操演示 这次我们使用WideWorldImportersDW库来演示。 首先查一下哪些表用了聚集列存储索引:USE [wideworl...原创 2020-03-10 15:33:28 · 365 阅读 · 0 评论 -
SQL Server On Linux(26)——SQL Server on Linux 性能(10)——列存储索引简介
本人新书上市,请多多关照:《SQL Server On Linux运维实战 2017版从入门到精通》本文介绍SQL On Linux上的性能提升功能,列存储索引,实际上这个并不仅仅是Linux上才有,所有平台的SQL Server包括windows、linux和云平台都有,而且在本人工作中用了不少,所以做个技术分享。前言 在SQL 2012之前,我们能用到的所有索引都是“行存储索引”...原创 2020-03-09 11:58:42 · 354 阅读 · 0 评论 -
SQL Server导入性能对比(3)——In-Memory搭配聚集列存储索引
接上文SQL Server导入性能对比(2)——非聚集列存储索导入,本文测试In-Memory搭配聚集列存储索引的导入性能。环境准备 先创建测试表,in-memory需要数据库开启“MEMORY_OPTIMIZED_DATA”并且添加专用文件组:use master;GOALTER DATABASE [ContosoRetailDW] ADD FILEGROUP [Conto...原创 2020-03-03 10:24:19 · 613 阅读 · 0 评论 -
SQL Server导入性能对比(2)——非聚集列存储索导入
接上文 SQL Server导入性能对比(1)——并行导入, 这次使用非聚集列存储索引来测试性能。环境 首先说明一下这里使用的还是SQL 2016以上的非聚集列存储索引,也就是可更新的列存储索引,在2012的时候已经出现但是是不可更新的。 首先先创建测试表,然后对全部列进行索引化。注意这个时候表实际上是堆表,因为没有任何聚集索引在上面。CREATE TABLE [dbo].[Fac...原创 2020-03-02 14:15:23 · 520 阅读 · 0 评论 -
SQL Server导入性能对比(1)——WITH TABLOCK并行导入
随着大数据和大量数据系统的出现,数据的加载变得越来越重要,很多岗位甚至只需要ETL技能,不过今时今日数据加载已经不再是单纯的ETL,还有ELT,甚至不需要进行数据移动的计算等等。本文先把精力放在传统的ETL上。介绍几种数据加载的过程和对比。常规数据加载方式 数据加载的本质就是把数据插入特定的地方,通常我们关注的是性能,说白了就是插入完成的时间,及引起的空间消耗。 本文及后面两篇文章...原创 2020-03-02 11:37:39 · 1562 阅读 · 0 评论 -
SQL Server—— 在ETL过程列存储索引vs 行存储索引
本人新书上市,请多多关照:《SQL Server On Linux运维实战 2017版从入门到精通》这几天我一直在跟进公司的一个性能问题,里面涉及到聚集列存储索引的问题。跟微软的技术支持讨论了一下,他们的建议可以考虑转成非聚集的列存储索引,那我到底怎么做好呢?我觉得有必要研究一下这两者的差异,说不定可以得出一个“不用列存储索引”的结论呢。为了感觉记录下处理过程,在本系列中先缓一下分区的内容...原创 2020-02-29 13:16:53 · 653 阅读 · 0 评论