数据库设计与性能优化

转自:http://blog.51cto.com/jimshu/1250066

一、数据库设计与性能优化--概述

jimshu关注2人评论5892人阅读2013-07-16 08:02:14

前言

  我1998年第一次接触SQL Server 6.5 for Windows NT 4.0,当时的感觉就认为SQL Server只是一个功能强大的Excel文件。现在回想起来,当年抱着这样一种态度,我开发的那些应用程序应该是非常幼稚的,其性能可想而知。记得那时候随便查询一笔记录就要花费十几秒,已是司空见惯。当时作为程序员(“码农”)兼DBA,我似乎只会抱怨这个数据库系统的“低级”、“质量差”,或者向boss提议升级服务器的硬件。由于一切都靠自学,我就没有反省过自身的数据库技术水平。

  2003年“非典”期间,我冒着生命危险去参加MCDBA2000的培训课程。XF Kong老师通过系统讲解,使我对SQL Server 2000的了解和掌握不再停留在肤浅的表面。随着逐步深入走向SQL Server底层技术,我对数据库的应用访问和日常运维终于摆脱了低级阶段。之后,各种性能问题的表症和对策也就逐清晰起来。

  最近几年看过Microsoft两位数据库“大拿”Howard Yin、Max Shen的文章,借助两位专家的研究成果,并参考一些技术书籍,借51CTO的这块风水宝地,我陆续会将SQL Server 性能优化的一系列心得与体会整理并发布出来。

一、概述

  《一、数据库设计与性能优化--概述》,即本文。http://jimshu.blog.51cto.com/3171847/1250066

  根据我的理解,OLTP的性能优化主要在于2个方面:

(1)系统架构和设计优化

  要在SQL Server方案中实现最优的性能,最关键的是要有一个很好的数据库设计方案。在实际工作中,许多SQL Server方案往往是由于数据库设计得不好导致性能很差。

  系统架构的设计对系统的性能有着直接的影响,如果设计不当,甚至将面临推倒重来的严重局面。一些大型软件企业或正规的软件开发团队一般都有专职的数据库架构专家参与设计系统架构,而且这个过程可能非常漫长。而“码农”们兼职在设计时往往忽略一些重要问题,或者因为开发周期太短而根本时间没有考虑这些因素,例如,没有考虑到未来3~5年的数据增长量,没有考虑到访问压力,等等。

  在设计数据库、表、索引、视图等对象时,不仅要熟悉这些对象的逻辑工作原理,更要了解这些对象可能存在的瓶颈,争取在设计阶段就实现优化。

  在数据库系统的维护阶段,需要通过一些工具对性能进行监视。

(2)查询优化

   SQL Server数据库查询速度慢的原因有很多,除了系统架构设计方面的问题,查询效率也值得重视。

  我首先将重点放在系统架构和设计优化方面,以下分别从软件生命周期的角度、从理解瓶颈的角度进行详细论述。

二、从软件生命周期的角度

  根据软件工程瀑布模型(Waterfall Model),软件的生命周期由多个部分组成。数据库的优化应当从设计阶段就开始,并贯穿整个软件生命周期。

1、设计

  建议由专职的数据库架构专家参与设计。

  需求分析时要具有前瞻性,至少要规划未来3~5年数据增长量。

  《二、服务器优化(1)实现负载平衡》 http://jimshu.blog.51cto.com/3171847/1250070

  《二、服务器优化(2)性能评测与负载预估》 http://jimshu.blog.51cto.com/3171847/1251142

  《二、服务器优化(3)服务器端优化措施》 http://jimshu.blog.51cto.com/3171847/1251545

  《二、服务器优化(4)资源调控器管理工作负荷》 http://jimshu.blog.51cto.com/blog/3171847/1251546

  《二、服务器优化(5)数据库版本的选型》 http://jimshu.blog.51cto.com/3171847/1251547

  《二、服务器优化(6)WSRM管理多个实例》 http://jimshu.blog.51cto.com/3171847/1252417

2、开发

  查询优化,索引优化

  《三、索引优化(1)堆上的非聚集索引》http://jimshu.blog.51cto.com/3171847/1252419

  《三、索引优化(2)聚集索引》 http://jimshu.blog.51cto.com/3171847/1252420

  《三、索引优化(3)聚集索引上的非聚集索引》 http://jimshu.blog.51cto.com/3171847/1252421

  《三、索引优化(4)索引碎片》 http://jimshu.blog.51cto.com/3171847/1254954

  《三、索引优化(5)索引设计指南》 http://jimshu.blog.51cto.com/3171847/1254956

  《三、索引优化(6)筛选索引》 http://jimshu.blog.51cto.com/3171847/1254965

  《查询优化(1)。。。》 、《查询优化(n)。。。》 将列入下一个专题。

3、测试、部署

  数据库物理优化,例如,数据库存储位置的设计。系统资源的优化。

  《四、物理优化(1)范式化》 http://jimshu.blog.51cto.com/3171847/1257298

  《四、物理优化(2)索引视图》http://jimshu.blog.51cto.com/3171847/1257306

  《四、物理优化(3)计算列及其索引》 http://jimshu.blog.51cto.com/3171847/1257310

  《四、物理优化(4)分区视图》 http://jimshu.blog.51cto.com/3171847/1258453

  《四、物理优化(5)表和索引分区》 http://jimshu.blog.51cto.com/3171847/1258459

  《四、物理优化(6)数据库引擎优化顾问》 http://jimshu.blog.51cto.com/3171847/1258469

  《四、物理优化(7)查看索引使用情况》 http://jimshu.blog.51cto.com/blog/3171847/1258817

4、日常运维

  数据库性能监测,资源优化。

  《五、性能监视(1)事件探查器》 http://jimshu.blog.51cto.com/3171847/1259089

  《五、性能监视(2)Windows性能日志》 http://jimshu.blog.51cto.com/3171847/1259091

  《五、性能监视(3)SQL 跟踪》 http://jimshu.blog.51cto.com/3171847/1259093

  《五、性能监视(4)扩展事件》 http://jimshu.blog.51cto.com/blog/3171847/1259321

  《五、性能监视(5)管理数据仓库》 http://jimshu.blog.51cto.com/3171847/1259322

  《五、性能监视(6)数据库审核》 http://jimshu.blog.51cto.com/3171847/1259323

  《五、性能监视(7)SQLDIAG》 http://jimshu.blog.51cto.com/3171847/1262406

三、从理解瓶颈的角度

  从数据库原理和实践经验来看,影响SQL Server有主要瓶颈有以下3项:

1、CPU

  《六、CPU优化(1)CPU技术分类》 http://jimshu.blog.51cto.com/3171847/1265166

  《六、CPU优化(2)超线程》 http://jimshu.blog.51cto.com/3171847/1265237

  《六、CPU优化(3)处理器组》 http://jimshu.blog.51cto.com/3171847/1265438

  《六、CPU优化(4)NUMA架构》http://jimshu.blog.51cto.com/3171847/1266977

  《六、CPU优化(5)最大并行度》 http://jimshu.blog.51cto.com/3171847/1266978

  《六、CPU优化(6)DMV与计数器》 http://jimshu.blog.51cto.com/3171847/1269174

2、内存

  《七、内存优化(1)启用AWE》 http://jimshu.blog.51cto.com/3171847/1269942

  《七、内存优化(2)动态内存分配》 http://jimshu.blog.51cto.com/3171847/1270005

  《七、内存优化(3)使用DMV》 http://jimshu.blog.51cto.com/3171847/1270018

  《七、内存优化(4)内存计数器》 http://jimshu.blog.51cto.com/3171847/1271576

  《七、内存优化(5)内存压力分析》

  《七、内存优化(6)SQL Server 2012内存管理的革新》

3、磁盘I/O

  《八、IO优化(1)磁盘簇》 http://jimshu.blog.51cto.com/3171847/1298514

  《八、IO优化(2)SQLIO工具》 http://jimshu.blog.51cto.com/3171847/1298515

  《八、IO优化(3)稀疏列》 http://jimshu.blog.51cto.com/3171847/1298558

  《八、IO优化(4)数据压缩》 http://jimshu.blog.51cto.com/3171847/1299047

  《八、IO优化(5)文件组》 http://jimshu.blog.51cto.com/3171847/1299170

  《八、IO优化(6)tempdb》 http://jimshu.blog.51cto.com/3171847/1299175

  《八、IO优化(7)减少IO竞争》 http://jimshu.blog.51cto.com/3171847/1299191

四、结语

  《九、OLTP 性能调整与优化--结语》 http://jimshu.blog.51cto.com/3171847/1300717

原文地址:https://www.cnblogs.com/gered/p/9431924.html

时间: 2024-10-11 13:42:33

数据库设计与性能优化的相关文章

MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化

MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化 前言: 很多人都认为性能是在通过编写代码(程序代码或者是数据库代码)的过程中优化出来的,其实这是一个非常大的误区.真正影响性能最大的部分是在设计中就已经产生了的,后期的优化很多时候所能够带来的改善都只是在解决前妻设计所遗留下来的一些问题而已,而且能够解决的问题通常也比较有限.本章将就如何在 MySQL 数据库 Schema 设计的时候保证尽可能的高效,尽可能减少后期的烦恼. 9.1 高效的模型设计 最规范的就一定

数据库的这些性能优化,你做了吗?

数据库的这些性能优化,你做了吗? 在互联网项目中,当业务规模越来越大,数据也越来越多,随之而来的就是数据库压力会越来越大.我们可能会采取各种方式去优化,比如之前文章提到的缓存方案,SQL优化等等,除了这些方式以外,这里再分享几个针对数据库优化的常规手段:「数据读写分离」与「数据库Sharding」. 作者:奎哥来源:数据库开发|2018-09-08 09:46 收藏 分享 在互联网项目中,当业务规模越来越大,数据也越来越多,随之而来的就是数据库压力会越来越大. 我们可能会采取各种方式去优化,比如

MySQL性能调优与架构设计——第10章 MySQL数据库Schema设计的性能优化

第10章 MySQL Server性能优化 前言: 本章主要通过针对MySQL Server(mysqld)相关实现机制的分析,得到一些相应的优化建议.主要涉及MySQL的安装以及相关参数设置的优化,但不包括mysqld之外的比如存储引擎相关的参数优化,存储引擎的相关参数设置建议将主要在下一章“常用存储引擎的优化”中进行说明. 10.1 MySQL 安装优化 选择合适的发行版本 1. 二进制发行版(包括RPM等包装好的特定二进制版本) 由于MySQL开源的特性,不仅仅MySQL AB提供了多个平

高性能可扩展MySQL数据库设计及架构优化 电商项目

第1章 数据库开发规范的制定    俗话说:"没有规矩不成方圆".这一章,我们就先来制定数据库开发的各种规范,包括:数据库命名规范.数据库基本设计规范.数据库索引设计规范.数据库字段设计规范.SQL开发规范以及数据库操作规范.通过这些规范的制定可以指导并规范我们后续的开发工作,为我们以后的工作提供一个良好的基础.... 第2章 电商实例数据库结构设计    数据库开发规范的基础之上,如何更好的利用规范设计出易于维护和伸缩性良好的数据库结构,是我们的学习目的.这一章我们根据常用电商项目需

no.14数据库的架构设计与性能优化读后感

杭州湖畔网络技术有限公司是一家专业提供SaaS化电商ERP服务的创业公司,主要用户群体为经营淘宝.天猫.京东等主流电商平台.自建商城.线下渠道的商家及中小企业.作为SaaS服务提供商,服务数万乃至数十万级用户是业务架构初期就必须考虑的问题.庞大的用户群以及海量的用户数据意味着基础设施的构建必须兼顾高效与稳定,而按照通用的基础设施建设方案的话,需要面对成本过高.实现复杂.需要投入太多精力等问题,这对当时的湖畔网络这样的初创公司来说,完全不能承受.因此,更经济.更方便扩展的云服务平台成为首选.在对比

数据库设计与SQL优化的建议

1. 用程序中,保证在实现功能的基础上,尽量减少对数据库的访问次数:通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担:能够分开的操作尽量分开处理,提高每次的响应速度:在数据窗口使用SQL时,尽量把使用的索引放在选择的首列:算法的结构尽量简单:在查询时,不要过多地使用通配符如SELECT * FROM T1语句,要用到几列就选择几列如:SELECT COL1,COL2 FROM T1:在可能的情况下尽量限制尽量结果集行数如:SELECT TOP 300 COL1,COL2,CO

响应式设计的性能优化(转)

2010年,Ethan Marcotte 提出了「响应式网页设计」(Responsive Web Design),通过 Media Query 和 Fluid Layout 判断屏幕宽度,自行调整布局. 一般,在页面头部加入 viewport 标签 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> viewport: 一般指的是浏览器

Android中数据库Sqlite的性能优化

1.索引简单的说,索引就像书本的目录,目录可以快速找到所在页数,数据库中索引可以帮助快速找到数据,而不用全表扫描,合适的索引可以大大提高数据库查询的效率.(1). 优点大大加快了数据库检索的速度,包括对单表查询.连表查询.分组查询.排序查询.经常是一到两个数量级的性能提升,且随着数据数量级增长. (2). 缺点索引的创建和维护存在消耗,索引会占用物理空间,且随着数据量的增加而增加.在对数据库进行增删改时需要维护索引,所以会对增删改的性能存在影响. (3). 分类a. 直接创建索引和间接创建索引直

数据库SQL语句性能优化

选择最有效率的表名顺序 ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表. 如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. WHERE子句中的连接顺序 ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WH