如何写出高效能TSQL – 关于索引不可不知道的事

原文地址:http://blogs.technet.com/b/technet_taiwan/archive/2015/01/23/tsql-series-0123.aspx 本文将分成五大单元,分别带您了解: 索引简介 索引基本知识 索引类型介绍 索引设计注意事项 进阶推荐   简介 TSQL是查询SQL Server的核心,而索引则是提高查询效能的主角,如要写出高效能TSQL则无可避免需搭配正确索引,因为SQL Server需透过正确索引才可以快速有效地找到与索引键值相关数据,有了正确索引SQL Server就不需要扫描数据页(data page)上每一笔数据,而在众多查询效能调校技术中,透过建立并设计正确索引算是最基本的手法 (通常来说也是最有效、最快能看到效果的),所以了解索引观念和特性,可以帮助我们在开发阶段设计规划正确索引,而且我们认为不管是开发人员或DBA都应该了解索引该如何设计,因为都有可能接收用户最直接的感受,说白话一点,每一句查询TSQL都要以最短时间响应给用户。但由于索引主题范围庞大,所以一开始我们会介绍索引基本知识、B-tree 结构等,后面介绍索引类型、案例分享及设计须注意的方向,主要是希望透过本文可以让大家快速建立正确索引。   索引基本知识 SQL Server 如何使用索引 我们都知道索引可以提高查询效能,但相对也增加新增(Insert)、删除(Delete)和更新(Update)数据处理成本,所以对整体效能来说找一个合适平衡点相当重要。 当一个数据表没有索引时,数据存放的顺序绝不是依照数据新增顺序,这是因为SQL Server Database Engine会自我处理数据储存位置,所以基本上,我们无法事先预测数据储存在数据页上是否都连续且都在同一区段中,而当一句Select送给SQL Server时,因为没有索引,这时SQL Server必须扫描整个数据表,以及该数据表的所有数据页和数据页上的每一笔数据,最后才返回用户最终所需要的数据结果集,这样的操作就称为表扫描(Full Table Scan)。 当数据表上有索引时 (假设索引设计正确),这时数据表上的数据一定会经过排序,所以SQL Server将基于该索引键值和结构来定位 (透过指针) 数据位置,简单来说只搜寻必要的数据页,而这些数据页已经包含用户最终所需要的数据结果集,这样的操作就称为索引搜寻(Index Seek)。 B-tree 索引结构 SQL Server所有索引基本上都采用B-tree结构,除了xml索引、全文检索索引(full-text)、数据行存放区索引(columnstore index)和内存优化索引(Memory-optimized indexes)不用B-tree。 xml 索引是存放在 SQL Server 底层数据表,全文检索索引是利用自己引擎来处理查德询和管理全文检索目录 (full-text catalogs),数据行存放区索引则是使用 in-memory 技术,内存优化索引则是使用 BW-tree 结构。 一个标准的B-tree结构 (图1)是由根结点(root)开始的页面,下面有一或多个中继层节点及一或多个分叶(Leaf)节点构成。…

1

Windows 10:全新一代的 Windows

微软宣布 Windows 10 将提供免费升级 揭开群组运算与全像摄影 Windows 10 装置神秘面纱 经过前一晚 Windows 10发表倒数计时,跨平台Windows即将登场 ,微软公司于今日发布了结合各类不同体验的新一代 Windows 系统,开启了更为个人化运算的新纪元,除此之外,微软也发布了两款全新装置,拓展从大屏幕到无屏幕等各类装置上的 Windows 体验。 Windows 10 将在装置上,提供一个更安全、创新与最新的体验。 Windows 10发表会在线影片回放: http://news.microsoft.com/windows10story/ Windows 10免费升级服务(附注1)将提供给目前使用Windows 7、Windows 8.1以及Windows Phone 8.1的消费者在第一年可以享受免费升级的服务。 「Windows 10的推出象征我们将进入以行动优先,云端至上(Mobile First, Cloud First)的世界,开启更加个人化运算的新世代」微软全球执行长Satya Nadella表示。「我们的目标是让目前正在使用 Windows 的 15 亿用户爱上 Windows 10,并让更多用户决定将 Windows 带回家。」 全新 Windows 10 体验: [View:~/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-91-73/Windows-10_5F00_-A-New-Generation-of-Windows.mp4:0:0] Windows 10:让计算机运算更加个人化 Windows 10的推出象征着我们将迎来更为个人化运算的新世代,这意味着以人为中心的理念将逐渐代替技术。 在这个新世代中,比起单纯让装置具有行动力,让使用经验具有行动力更重要、而且要无缝的让相同的体验跨到不同装置上。 用户应能够像与他人互动一样,用语音、手势和目光自然地与科技互动,在这样的情况下如果要提供一个值得信任的使用体验,隐私权保护就扮演着举足轻重的角色。 在活动上微软展示了Windows 10提供的多种新体验,具体包括:…

1

从 Web Server 向 Azure WebSites 迁移的利器(Migration Assistant)

原文地址:http://blogs.technet.com/b/nevin_dongs_blog/archive/2014/12/25/web-server-azure-websites-migration-assistant.aspx 将Web应用迁移到云端,常见的做法是采用IaaS模式,即创建虚拟机(Virtual Machine,VM)并在上面分别部署Web Server、Database Server、Cache Server、DNS Server等;当访问负荷增大的时候,则增加虚拟机的数量来实现伸缩。 之前曾讨论过,可以将数据库服务器(Database Server)采用Platform as a Server(PaaS)模式来提供,也有相关的迁移工具来帮助从SQL Server迁移到Azure SQL Database。 Azure网站(WebSites)是一种完全托管的平台即服务 (PaaS) 产品,便于快速高效地构建、部署并扩展企业级 Web 应用。同时,可以支持按需自动缩放(Auto-scaling),灵活支持不同时间段的并发访问负荷,特别是尖峰负荷。此外,可以显著降低运维工作量,而不必过多关注底层虚拟机、操作系统、网络、负载均衡等细节。 对于Azure网站的更多细节,可以参考:http://www.windowsazure.cn/home/features/web-site/ 可以开发ASP.NET网站并部署到Azure网站,相关步骤可参考:http://www.windowsazure.cn/zh-cn/develop/net/tutorials/web-site-intro-tutorial/ 如果将现有Web应用迁移到Azure网站,可以使用一个开源的辅助工具:Azure Websites Migration Assistant,具体可参考:http://migrate4.azurewebsites.net/ 目前支持从IIS Server迁移到Azure WebSites,其中特别提供了技术兼容性等方面的分析,例如端口绑定(Port Binding)、IIS身份认证、GAC、缓冲池等。如下图,工具将给出分析报告。 目前,这个工具只支持从IIS server到Azure WebSites的迁移辅助,而Azure WebSites还支持Java、PHP、Node.js或Python,后续期待工具能够涵盖对这些技术的支持;当然,也可以考虑参考这个工具的思路,开发适合自己需要的迁移辅助工具。


如何写出高效能TSQL -深入浅出SQL Server Relational Engine (含 SQL 2014 in-memory Engine)

原文地址:http://blogs.technet.com/b/technet_taiwan/archive/2015/01/16/tsql-series-0116.aspx 简介 良好的TSQL和正确索引是大幅提高查询效能最快的快捷方式,同时TSQL也是使用SQL Server的核心,任何应用程序想要和SQL Server沟通,都无法避免撰写TSQL,所以各种效能调校方法中,我们认为查询调校是最省成本、最快能感受到效果的方法 (如下图),这一系列文章将为大家介绍如何写出高效能TSQL,以及开发人员必须了解SQL Server相关基本知识和观念,这样才能活用相关技术,并发挥SQL Server无限潜能。     SQL Server 关系型引擎 SQL Server数据库引擎主要有两部分,这我们里不讨论储存引擎(storage engine)架构,而将会着重在关系型引擎。 由于SQL Server处理查德询过程步骤相当繁琐,当一句TSQL送给SQL Server时,我们须了解关系型引擎是如何工作的,因为每一句TSQL都必须透过关系型引擎分析处理,最后才会透过储存引擎执行并返回用户所需的数据结果集,理解关系型引擎不仅可以帮我们预先避开效能陷阱,同时也有助于我们减少查询调校和除错时间,下面我将说明几个处理关键步骤。 图一:SQL Server处理查询简单示意 图二:SQL Server处理查询关键步骤流程图   分析和绑定 一开始查询优化器会先确认语法正确性,如有错误将会立即返回错误讯息给用户,如果没有错误就会建立分析树并进行对象绑定 (如数据表字段是否存在、数据型别是否正确、函式是否异常..等),主要是因为 TSQL 并非程序性语言,它无法告知数据库应该用什么样正确步骤来撷取数据,所以这阶段会帮你处理基本语法优化、数据型别转换,简单来说就是会改写 TSQL,如把 between 转换为 >= and <=,型别比较不一致时,自动增加转换函数来确保数据正确性 (这就可能会大大影响查询效能), group by 位置..等,最后将输出逻辑 (操作) 查询树,后面将会依照所输出逻辑查询树步骤来一一执行。   查询优化 查询优化几乎可说是最复杂且耗时的阶段 (所以大家要有一点想象力),一开始会先确认计划快取区是否有适当的执行计划,如果没有找到适当执行计划,就会进行一般优化 (如果可以的话),然后再次从计划快取区寻找是否有适当的一般计划,如果存在就会分配相关内存并执行,这是因为不必为只有一种可能执行方法的TSQL进行完整优化,如此一来可以省下编译和建立执行计划时间,因为我们知道查询效能一部分取决于建立执行计划效率 (执行查询时间是产生执行计划时间 + 本身数据查询时间),所以查询优化器并不会寻找最佳执行计划,而是尽可能寻找最低成本 (以 CBO 为基础的 CPU、I/O 成本) 及传回结果速度最快的执行计划,如果该TSQL有达到一般计划条件的话,那么查询优化器将可不必进行完整优化而浪费不必要时间,下面我简单列出建立一般计划的情况…


对 Azure Backup 的常见配置问题进行故障排除

此文章有助于解决 Microsoft 云备份解决方案(即Azure Backup)的常见配置问题。客户通常会在安装或注册 Azure Backup 时遇到这些问题。以下是有关如何诊断和解决问题的建议。 Azure Backup安装失败,显示 " 为选择的安装文件夹指定的属性无效 " 。 尝试在拥有 “ System ” 、 “ Hidden ” 、 “ Compressed ” 或 “ Encrypted ” 属性的文件夹中安装Azure Backup Agent时,会显示 “ 为选择的安装文件夹指定的属性无效 ” 消息。 请删除安装文件夹上的 “ System ” 、 “ Hidden ” 、 “ Compressed ” 或 “ Encrypted ” 属性。下面是关于如何删除文件夹属性的分步指导。 1. 请参考知识库文章…


面向 VMM 服务模板的 Windows Azure 包、Service Provider Foundation 和 IaaS API 支持

原文地址:http://blogs.technet.com/b/orchestrator/archive/2014/07/03/windows-azure-pack-service-provider-foundation-and-iaas-api-support-for-vmm-service-templates.aspx John Ballard [MSFT]   简介 特别感谢SrimathiSanthanam、Thomas Yip和FilippoSeracini(博士)帮助收集和测试本文的示例。 继 2013 年秋季System Center 2012 R2 和 Windows Azure 包发布之后,我们收到的用户咨询数量越来越多,人们表示希望获取有关IaaS APIVMM 服务模板支持观点的帮助。有一点要澄清的是,Service Provider Foundation从一开始就纳入了VMM服务模板管理和使用支持。 造成人们提问的最大原因在于人们十分强调Azure一致性,这已经渗透到追求Cloud OS愿景的方方面面。为帮助人们真正认识Cloud OS的长期优势(一致体验、一个工具集、一个 API),不久前我们开始鼓励客户及合作伙伴重点将Windows Azure 包的服务管理 API作为基于IaaS功能(属于由Windows Server & System Center提供支持的Cloud OS的一部分)编程的切入点。从这个角度而言,Service Provider Foundation仅仅是Windows Azure 包的服务管理 API 与 System Center之间的桥梁,而不是主要IaaS API本身。 但是,同样由于强调Azure一致性,Windows Azure包的服务管理 API 不支持VMM服务模板。同时也不支持Azure一致的VM 角色项目(一个类似的概念),这个新项目目前缺乏VMM服务模板的一些功能(例如,一次定义多个层)。 所以,在等待VM角色填补这些空白的同时,人们该做些什么?答案是采用混合方法:继续重点运用Windows Azure包的服务管理 API 完成IaaS编程工作,同时如果需要对这些功能进行编程访问,请使用Service Provider Foundation作为 VMM…


Microsoft Azure 门户库中的 SQL Server AlwaysOn 产品

原文地址:http://blogs.technet.com/b/dataplatforminsider/archive/2014/08/25/sql-server-alwayson-offering-in-microsoft-azure-portal-gallery.aspx SQL Server 团队   我们非常高兴地宣布在Microsoft Azure 门户库中推出SQL Server AlwaysOn模板。Scott Guthrie的博客中已宣布推出本产品并提供了其他一些令人振奋的新功能。 此模板运用AlwaysOn可用性组,基于Azure Infrastructure Services全自动配置高度可用的SQL Server部署。 AlwaysOn可用性组 AlwaysOn可用性组于SQL Server 2012中推出并在SQL Server 2014中进行了增强,它可保证任务关键工作负载的高可用性。去年,我们开始支持Azure Infrastructure Services 可用性组。此配置的主要组件是两个SQL Server 副本(主副本和辅助副本)和一个侦听器(DNS 名称)。副本配置为自动故障转移,每个副本均包含在不同的虚拟机中。侦听器是客户端应用程序可在其连接字符串中使用的一个DNS名称,用以连接当前的主副本。下图显示了相关设置描述。   所需的其他组件包括一个文件共享见证(用于保证配置仲裁以避免“分裂”场景)和一个域控制器(用于将所有虚拟机加入相同的域)。与SQL副本类似,其中包含主域控制器和辅助域控制器,以便防止域发生单点故障。SQL副本将被部署到可用性集,确保位于不同的Azure故障和升级域。同样,域控制器副本也位于各自的可用性集中。下图对该配置进行了说明。   SQL Server AlwaysOn模板 设置可用性组配置需要执行一长串步骤并且需要投入适当的时间。为了通过动态方式简化该过程,我们在Azure库中发布了SQL Server AlwaysOn模板。此模板运用可用性组,基于Azure Infrastructure Services自动配置高度可用的SQL Server部署。目前,此功能仅支持SQL Server 2014 Enterprise映像。 SQL Server AlwaysOn模板(如下所述)位于“Virtual Machines” and “Recommended”下的库中。 选择后,显示将要创建的配置描述和一个用于指定某些参数的选项。下图对此进行了说明。 需要指定的两个参数是Resource Group(一种部署标识符)和administrator credentials。自此以后,所有设置均为可选模式并将根据这 3 项输入自动生成。域Sysadmin帐户、本地SQL Server…