从外到内提高SQL Server数据库性能

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

如何提高SQL Server数据库的性能,该从哪里入手呢?笔者认为,该遵循从外到内的顺序,来改善数据库的运行性能。如下图:

  第一层:网络环境

  到企业碰到数据库反映速度比较慢时,首先想到的是是否是网络环境所造成的。而不是一开始就想着如何去提高数据库的性能。这是很多数据库管理员的一个误区。因为当网络环境比较恶劣时,你就算再怎么去改善数据库性能,也是枉然。

  如以前有个客户,向笔者反映数据库响应时间比较长,让笔者给他们一个提高数据库性能的解决方案。那时,笔者感到很奇怪。因为据笔者所知,这家客户数据库的记录量并不是很大。而且,他们配置的数据库服务器硬件很不错。笔者为此还特意跑到他们企业去查看问题的原因。一看原来是网络环境所造成的。这家企业的客户机有200多台,而且都是利用集线器进行连接。这就导致企业内部网络广播泛滥,网络拥塞。而且由于没有部署企业级的杀毒软件,网络内部客户机存在病毒,掠夺了一定的带宽。不仅数据库系统响应速度比较慢,而且其他应用软件,如邮箱系统,速度也不理想。

  在这种情况下,即使再花十倍、百倍力气去提升SQL Server数据库的性能,也是竹篮子打水一场空。因为现在数据库服务器的性能瓶颈根本不在于数据库本身,而在于企业的网络环境。若网络环境没有得到有效改善,则SQL Server数据库性能是提高不上去的。

  为此,笔者建议这家企业,想跟他们的网络管理员谈谈,看看如何改善企业的网络环境,减少广播包和网络冲突;并且有效清除局域网内的病毒、木马等等。三个月后,我再去回访这家客户的时候,他们反映数据库性能有了很大的提高。而且其他应用软件,性能也有所改善。

  所以,当企业遇到数据库性能突然降低的时候,第一个反应就是查看网络环境,看看其实否有恶化。只有如此,才可以少走冤枉路。

  第二层:服务器配置

  这里指的服务器配置,主要是讲数据库服务器的硬件配置以及周边配套。虽然说,提高数据库的硬件配置,需要企业付出一定的代价。但是,这往往是一个比较简便的方法。比起优化SQL语句来说,其要简单的多。

  如企业可以通过增加硬盘的数量来改善数据库的性能。在实际工作中,硬盘输入输出瓶颈经常被数据库管理员所忽视。其实,到并发访问比较多的时候,硬盘输入输出往往是数据库性能的一个主要瓶颈之一。此时,若数据库管理员可以增加几个硬盘,通过磁盘阵列来分散磁盘的压力,无疑是提高数据库性能的一个捷径。

  如增加服务器的内存或者CPU。当数据库管理员发现数据库性能的不理想是由内存或者CPU所造成的,此时,任何的改善数据库服务器本身的措施都将一物用处。所以,有些数据库管理专家,把改善服务器配置当作数据库性能调整的一个先决条件。

  如解决部署在同一个数据库服务器上的资源争用问题。虽然我们多次强调,要为数据库专门部署一个服务器。但是,不少企业为了降低信息化的成本,往往把数据库服务器跟应用服务器放在同一个服务器中。这就会导致不同服务器之间的资源争用问题。如把文件服务器跟数据服务器部署在同一个服务器中,当对文件服务器进行备份时,数据库性能就会有明显的下降。所以,在数据库性能发现周期性的变化时,就要考虑是否因为服务器上不同应用对资源的争夺所造成的。

  故,笔者建议,改善数据库性能时第二个需要考虑的层面,就是要看看能否通过改善服务器的配置来实现。

  第三层:数据库服务器

  当通过改善网络环境或者提高服务器配置,都无法达到改善数据库性能的目的时,接下去就需要考察数据库服务器本身了。首先,就需要考虑数据库服务器的配置。

  一方面,要考虑数据库服务器的连接模式。提供了很多的数据库模式,不同的数据库连接模式对应不同的应用。若数据库管理员能够熟悉企业自身的应用,并且选择合适的连接模式,这往往能够达到改善数据库性能的目的。

  其次,合理配置数据库服务器的相关作业。如出于安全的需要,数据库管理员往往需要对数据库进行备份。那么,备份的作业放在什么时候合适呢?当然,放在夜晚,夜深人静的时候,对数据库进行备份最好。另外,对于大型数据库,每天都进行完全备份将会是一件相当累人的事情。虽然累得不是我们,可是数据库服务器也会吃不消。差异备份跟完全备份结合将是改善数据库性能的一个不错的策略。

  第四层:数据库对象

  若以上三个层面后,数据库性能还不能够得到大幅度改善的话,则就需要考虑是否能够调整数据库对象来完成我们的目的。虽然调整数据库对象往往可以提到不错的效果,但是,往往会对数据库产生比较大的影响。所以,笔者一般不建议用户一开始就通过调整数据库对象来达到改善数据库性能的目的。

  数据库对象有表、视图、索引、关键字等等。我们也可以通过对这些对象进行调整以实现改善数据库性能的目标。

  如在视图设计时,尽量把其显示的内容缩小,宁可多增加视图。如出货明细表,销售人员可能希望看到产品编号、产品中英文描述、产品名字、出货日期、客户编号、客户名字等等。但是,对于财务来说,可能就不需要这么全的信息。他们只需要产品编号、客户编号、出货日期等等少量的信息即可。所以,能可浪费一点代码的空间,设计两张视图,对应不同部门的需求。如此,财务部门在查询数据时,不会为不必要的数据浪费宝贵的资源。

  如可以通过合理设置索引来提高数据库的性能。索引对于提高数据的查询效率,有着非常好的效果。对一些需要重复查询的数据、或者数据修改不怎么多的表设置索引,无疑是一个不错的选择。

  另外,要慎用存储过程。虽然说存储过程可以帮助大家实现很多需求。但是,在万不得已的情况下,不要使用存储过程。而利用前台的应用程序来实现需求。这主要是因为在通常情况下,前台应用程序的执行效率往往比后台数据库存储过程要高的多。

  第五层:SQL 语句

  若以上各个层面你都努力过,但是还不满足由此带来的效果的话,则还有最后一招。通过对SQL语句进行优化,也可以达到改善数据库性能的目的。

  虽然说SQL Server服务器自身就带有一个SQL语句优化器。他会对用户的SQL语句进行调整、优化,以达到一个比较好的执行效果。但是,据笔者的了解,这个最多只能够优化一些粗略的层面。或者说,80%的优化仍然需要数据库管理员的配合。要数据库管理员跟SQL优化器进行配合,才能够起到非常明显的作用。

  不过,SQL语句的调整对于普通数据库管理员来说,可能有一定的难度。除非受过专业的训练,一般很难对SQL语句进行优化。还好笔者受过这方面的专业训练,对这方面有比较深的认识。如在SQL语句中避免使用直接量。任何一个包含有直接量的SQL语句都不太可能被再次使用。我们数据库管理员要学会利用主机变量来代替直接量。不然,这些不可再用的查询语句将使得程序缓存被不可再用的SQL语句填满。这都是平时工作中的一些小习惯。

  总之,笔者认为,在数据库性能调优的时候,若能够遵循如上的顺序,必定可以让我们少走冤枉路,不花无用功。其实,数据库调优并没有我们想象的这么难。只要我们能够掌握其中的诀窍,数据库调优将可以手到擒来。上文中讲到的提高SQL Server数据库性能大家要灵活运用,这些方法也不是什么灵丹妙药,要根据具体情况去操作,希望这篇文章在供大家参考的时候能够帮到大家。

本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2012/09/15/2686034.html ,如需转载请自行联系原作者
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
16天前
|
XML Java 数据库连接
性能提升秘籍:如何高效使用Java连接池管理数据库连接
在Java应用中,数据库连接管理至关重要。随着访问量增加,频繁创建和关闭连接会影响性能。为此,Java连接池技术应运而生,如HikariCP。本文通过代码示例介绍如何引入HikariCP依赖、配置连接池参数及使用连接池高效管理数据库连接,提升系统性能。
50 5
|
18天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
4天前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
18天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
26天前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
86 10
|
19天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
26天前
|
缓存 监控 关系型数据库
如何根据监控结果调整 MySQL 数据库的参数以提高性能?
【10月更文挑战第28天】根据MySQL数据库的监控结果来调整参数以提高性能,需要综合考虑多个方面的因素
66 1
|
26天前
|
监控 关系型数据库 MySQL
如何监控和诊断 MySQL 数据库的性能问题?
【10月更文挑战第28天】监控和诊断MySQL数据库的性能问题是确保数据库高效稳定运行的关键
45 1
|
26天前
|
缓存 关系型数据库 MySQL
如何优化 MySQL 数据库的性能?
【10月更文挑战第28天】
51 1
|
27天前
|
SQL 关系型数据库 MySQL
惊呆:where 1=1 可能严重影响性能,差了10多倍,快去排查你的 sql
老架构师尼恩在读者交流群中分享了关于MySQL中“where 1=1”条件的性能影响及其解决方案。该条件在动态SQL中常用,但可能在无真实条件时导致全表扫描,严重影响性能。尼恩建议通过其他条件或SQL子句命中索引,或使用MyBatis的`<where>`标签来避免性能问题。他还提供了详细的执行计划分析和优化建议,帮助大家在面试中展示深厚的技术功底,赢得面试官的青睐。更多内容可参考《尼恩Java面试宝典PDF》。