如何优化数据库的性能

如何优化数据库的性能,第1张

1、建表要科学,业务允许的话,尽可能的控制字段不要太多,合理的限制字段的类型和长度;

2、在常用的查询字段上建立索引;

3、不要太被第几范式之类的东西迷惑,最后是按着规范来了,每个查询都要join个5、6个表谁看着也不舒服,要合理的冗余(这个要根据自己业务来的);

4、多用业务层的缓存,比如字典库的东西不算多的话,都缓存起来吧,这样用的时候就不用select了。

5、能用TinyInt不用int,能用int不用char等等,效率来说,还是数字大于字符的;

6、多看看数据库的样例表,能学到很多东西的。

先想到了这么多,希望能帮助到你。

现在的服务器都很NB了,只要不是滥用缓存的话,就不用太在意内存大小了。

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

第一层 网络环境

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

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

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

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

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

第二层 服务器配置

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

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

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

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

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

第三层 数据库服务器

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

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

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

第四层 数据库对象

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

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

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

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

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

第五层 SQL 语句

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

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

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

lishixinzhi/Article/program/SQLServer/201311/22452

在需要支持移动/平板电脑应用及普通桌面浏览器访问的时代,网站的普及率和有效性很大程度上取决于其可用性和性能。一个访问缓慢的网站会使得访问者或潜在的客户流失,并导致商业的失败。IT培训认为一个访问速度相当快的网站将会决定访客是否会使用网站提供的产品或服务。

拥有大规模数据库的网站始终需要适当的关注、配置、优化、调整和维护,以确保网站的快速加载。这篇文章将讨论如何优化有海量数据的MySQL数据库。

选择InnoDB作为存储引擎

大型产品的数据库对于可靠性和并发性的要求较高,InnoDB作为默认的MySQL存储引擎,相对于MyISAM来说是个更佳的选择。

优化数据库结构

组织数据库的schema、表和字段以降低I/O的开销,将相关项保存在一起,并提前规划,以便随着数据量的增长,性能可以保持较高的水平。

设计数据表应尽量使其占用的空间最小化,表的主键应尽可能短。

对于InnoDB表,主键所在的列在每个辅助索引条目中都是可复制的,因此如果有很多辅助索引,那么一个短的主键可以节省大量空间。

仅创建你需要改进查询性能的索引。索引有助于检索,但是会增加插入和更新 *** 作的执行时间。

InnoDB的ChangeBuffering特性

InnoDB提供了changebuffering的配置,可减少维护辅助索引所需的磁盘I/O。大规模的数据库可能会遇到大量的表 *** 作和大量的I/O,以保证辅助索引保持最新。当相关页面不在缓冲池里面时,InnoDB的changebuffer将会更改缓存到辅助索引条目,从而避免因不能立即从磁盘读取页面而导致耗时的I/O *** 作。当页面被加载到缓冲池时,缓冲的更改将被合并,更新的页面之后会刷新到磁盘。这样做可提高性能,适用于MySQL55及更高版本。

首先 数据库的性能有很多种 1:速度性能2:并发性能3:事务性能 在速度性能上,首先你需要首先确定你的测试环境。举个例子,比如你的软件可能的用户群是一群使用586电脑的客户,那么肯定是mysql的效率要高出oracle这个是为什么呢,mysql在事务策略和安全策略上做的工作远没有oracle做出的多。如果软件不需要这方面的高要求,那么完全可以使用mysql,这样机器的配置可以比较低,但是表现出的性能会更加优越。 前面是题外话,在测试前你需要首先顶一下你的测试环境,为了能让oracle充分的表现出他的性能,你应该选取一些强劲的小型机或者服务器来作为测试环境(虽然这样的环境对于mysql来说可能浪费了,但是这样才能确保2个数据库都充分的发挥的自己的特性)。 其次,测试访问速度,你可以通过对数据库的大批量写入来看出效果。所谓大批量写入应该尝试使用存储过程一次读入了10M的数据文件然后写入并且记录时间(同时记录cpu,内存等占用情况)。然后对于至少2个超过10万的数据表做笛卡尔积查询(全连接),查看查询的时间。

对于一般的应用来说各种技术手段通常都是差不多的,你要关心速度和性能就要提升到程序的框架设计上和整个系统的框架设计上。

拿程序框架来说,比如采用DataTable处理数据的那ADONET就足够用了,如果是采用面向对象的那实体ORM框架就比较合适。至于优化性能,那又需要涉及到程序的缓存(redis/memcache/自己实现缓存等等 ),说到底是技术运用的能力决定了性能,如果技术能力不够往往性能也很难达到。

系统架构来说的话,数据库确实很重要,不过重要的是对数据库相关的应用技术的掌握,比如SQL Server,如果你对windows很了解,对windows集群,SQL集群很了解,那自然你可以提高他的性能。要说性能最好还是要扯到技术应用水平上去的。

最为推荐,一般来说Linux平台+mysql性能 经过实践是很高效的。

1应该是根据所建立信息系统客户的人数、预算的总数据量、平均访问量选择数据库。

2性能指标就比较多了,你可以考虑一下数据库的可移植性(适用于不同的 *** 作系统平台),数据库的并发性(同时 *** 作一条数据或者一张表时数据的锁定方式),还有就是数据库的恢复能力(在出现异常数据能够最快完成恢复及备份的时间)。 --还有安全性,这个也很重要

300个人左右的b/s系统我推荐db2,并发性比sqlserver高,你要用常用的话甲骨文也可以,一般c/s系统都用sqlserver(中),access、mysql(小)

如果要说特点,真的是太多了,10000个字都不够写,你如果要买他们的产品,可以上网站或者找售前帮你

价格的话:sqlserver正版的大概就是10来万,db2要买服务,基本一年是15万到20万(基本服务),面向的应用我上面说了,b/s系统适合db2和甲骨文

这个性能是无法度量的,还要看你应用的情况,db2的应用最大的数据量理论上可以上亿,只要你数据库设计得合理,软件可以不要钱,基本服务一年是15到20万,不包括数据仓库,软件就是靠的增值服务,但是你不买服务就没有技术支持,而且商用的话你也有风险

如果你非要把其他baidu搜到的东西列在这里,什么具体性能指标也没什么意义,还不如看ibm的db2白皮书,以我的经验来看,你应用在300个人在500个人的在线量,百万条数据,同时访问数据库,用db2不存在什么大的负载,非要说什么特点的话,就是一个字贵,db2的硬件的要求比较高,最好能上存储

sqlserver存在一些安全性问题,而且大多数都运行在windows平台,对安全性的要求都不一样,你去了解一下aix就知道了

以上就是关于如何优化数据库的性能全部的内容,包括:如何优化数据库的性能、从外到内提高SQL Server数据库性能、大规模数据库的性能和伸缩性的优化等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10174870.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存