数据库优化

优化杭州某著名电子商务网站高并发千万级大型数据库经验之- 内存性能

孤人 提交于 2019-12-29 05:18:00
好久没写博客了,一方面是日常工作繁忙,另外一方面是想更多的时间陪陪家里人,享受春天的美好时光,同时还在写一本 《程序员,你伤不起》 的一本书要由人民邮电出版社出版;我的性格可能也跟大多数程序员类似吧,没什么兴趣爱好、不擅长与人交流,平时话也少,也不够幽默,就是一个实实在在的人。很多漂亮的女人都无法理解我们干程序员的,大多都嫁给了做业务啊或者做销售的,只有很朴实的、想是实实在在过日子的女人才能理解我们这些技术码工出身的程序员。 其实事实证明你当个优秀的码工比很多做业务的日子过得都滋润。人死了后几乎留不下什么东东,所以我趁着活着的时候把生活工作的点点滴滴都写在网上,给需要的人分享经验、同时也能得到高人的指点。写文章一方面证明的实力、另一方面也给社会分享,而不只是索取也讲分享。将来可以看到自己每一年的提高升华的点滴足迹。 下图命名为:孤独的程序员 由于服务器是超级强大,所以内存也非常强大,我们的核心数据库大小是100G不到,所以几乎把所有的数据库都能装到内存里也可以了,真是强筋的服务器,有钱真好,可以购买最最强大的服务器玩玩。 在侦测服务器性能时,内存总是停留在165G的一个直线上,从来不会突破,也不会变好,经过3天的思索,感觉是数据库分配的内存更没没有用光,就分配了165G后,一直是够用了,所以内存表现出一条直线,也没什么波动;刚开始以为是内存不够

数据库优化浅谈

只谈情不闲聊 提交于 2019-12-28 20:07:29
最好不要用自增属性字段作为主键与子表关联。不便于系统的迁移和数据恢复。对外统计系统映射关系丢失。 表的设计具体注意的问题: 1、数据行的长度不要超过8020字节,如果超过这个长度的话在物理页中这条数据会占用两行从而造成存储碎片,降低查询效率。 2、能够用数字类型的字段尽量选择数字类型而不用字符串类型的(电话号码),这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。 3、对于不可变字符类型char和可变字符类型varchar 都是8000字节,char查询快,但是耗存储空间,varchar查询相对慢一些但是节省存储空间。在设计字段的时候可以灵活选择,例如用户名、密码等长度变化不大的字段可以选择CHAR,对于评论等长度变化大的字段可以选择VARCHAR。 4、字段的长度在最大限度的满足可能的需要的前提下,应该尽可能的设得短一些,这样可以提高查询的效率,而且在建立索引的时候也可以减少资源的消耗。 查询的优化 保证在实现功能的基础上,尽量减少对数据库的访问次数;通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担;能够分开的操作尽量分开处理,提高每次的响应速度;在数据窗口使用SQL时,尽量把使用的索引放在选择的首列;算法的结构尽量简单;在查询时,不要过多地使用通配符如SELECT *

数据库优化笔记

和自甴很熟 提交于 2019-12-27 18:13:54
各个数据来源于各个论坛 我只是搬运工 优化思路 1.从硬件到架构. 硬件 --> 系统 --> 应用 --> 数据库 --> 架构(高可用、读写分离、分库分表) 2.从数据库表到硬件 架构: (1)、从需求设计开始:数据优化表结构、字段类型、字段索引、锁,后期=>分表,分库、读写分离等等。 (2)、从数据库查询层面:优化SQL语句,合理使用字段索引。 数据库: (3) 、从数据库内核层面:版本,innodb,mylsam引擎,配置mysql性能优化参数 应用架构: (4)、从代码层面增强性能: jdbc事务ACID,尽可能避免数据库直接查询过大数据量给客户端 使用缓存和NoSQL数据库方式存储,如MongoDB/Memcached/Redis来缓解高并发下数据库 查询的压力。 编程手段防止SQL注入:使用JDBC PreparedStatement按位插入或查询;正则表达式过滤(非法字符串过滤)。 (5)、搭建数据库集群。 硬件系统: (6)、提升数据库服务器硬件配置,系统参数配置 一 。参数配置 一。数据库结构表设计 1 , 数据优化表结构、字段类型、字段索引、分表,分库、读写分离等等。 ============================================================== (1) 表设计 字段一般根据需求来 遵循三大范式 , 概念

mysql数据库优化

折月煮酒 提交于 2019-12-24 17:48:08
前言 数据库优化一方面是找出系统的瓶颈,提高MySQL数据库的整体性能,而另一方面需要合理的结构设计和参数调整,以提高用户的相应速度,同时还要尽可能的节约系统资源,以便让系统提供更大的负荷. 1. 优化一览图 2. 优化 笔者将优化分为了两大类,软优化和硬优化,软优化一般是操作数据库即可,而硬优化则是操作服务器硬件及参数设置. 2.1 软优化 2.1.1 查询语句优化 1.首先我们可以用EXPLAIN或DESCRIBE(简写:DESC)命令分析一条查询语句的执行信息. 2.例: DESC SELECT * FROM `user` 显示: 其中会显示索引和查询数据读取数据条数等信息. 2.1.2 优化子查询 在MySQL中,尽量使用JOIN来代替子查询.因为子查询需要嵌套查询,嵌套查询时会建立一张临时表,临时表的建立和删除都会有较大的系统开销,而连接查询不会创建临时表,因此效率比嵌套子查询高. 2.1.3 使用索引 索引是提高数据库查询速度最重要的方法之一,关于索引可以参高笔者<MySQL数据库索引>一文,介绍比较详细,此处记录使用索引的三大注意事项: LIKE关键字匹配'%'开头的字符串,不会使用索引. OR关键字的两个字段必须都是用了索引,该查询才会使用索引. 使用多列索引必须满足最左匹配. 2.1.4 分解表 对于字段较多的表,如果某些字段使用频率较低,此时应当

开发之缓存与数据库优化

核能气质少年 提交于 2019-12-20 02:09:10
此文仅入门,需要扩展挖深,自行钻研 缓存-redis 数据库-mysql 1. 缓存 什么是缓存? 定义 缓存是系统快速响应的一种关键性技术,是一组被保存起来以备将来使用的东西,介于应用开发和系统开发之间,是产品经理们经常顾及不到的地方,也是技术架构设计的非功能性约束。 分类 按软件系统所处的位置不同分类 客户端缓存 服务端缓存 网络中的缓存 按规模和部署方式分类: 单体缓存 缓存集群 分布式缓存 为什么要用缓存? 为什么要用缓存,我们这里仅从软件开发层面来分析,首先你必须了解关于系统的性能的一些指标。 系统的性能的指标一般包括: 响应时间:系统对用户的请求作出的响应时间,它完整的记录了整个系统处理请求的时间。 延迟时间:一般指系统处理完请求后,由于网络传输到用户之间的网络延迟时间。 吞吐量:指单位时间内系统处理请求的数量。无并发的系统中,它与响应时间成反比。 并发用户数:指系统能够同时承载的正常使用系统功能的用户数量,它比 吞吐量更能直观的反应系统的性能 资源利用率:反映的是一段时间内资源平均被占用的情况 系统的性能,反映在从浏览器到网络,再到服务器,甚至数据库等各个应用层面。而在各个层面使用缓存将大大提升整个系统的性能。 缓存离客户端越近,响应时间则越快;缓存离数据库越近,则响应时间越长。 缓存是一种用空间换时间的概念。 如果带宽收费(流量付费),那么缓存就是变相的省钱利器。

大数据量数据库优化

血红的双手。 提交于 2019-12-19 06:31:06
大数据量数据库优化 一、数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能。所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的。 在一个系统分析、设计阶段,因为数据量较小,负荷较低。我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程。 所以在考虑整个系统的流程的时候,我们必须要考虑,在高并发大数据量的访问情况下,我们的系统会不会出现极端的情况。(例如:对外统计系统在7月16日出现的数据异常的情况,并发大数据量的的访问造成,数据库的响应时间不能跟上数据刷新的速度造成。具体情况是:在日期临界时(00:00:00),判断数据库中是否有当前日期的记录,没有则插入一条当前日期的记录。在低并发访问的情况下,不会发生问题,但是当日期临界时的访问量相当大的时候,在做这一判断的时候,会出现多次条件成立,则数据库里会被插入多条当前日期的记录,从而造成数据错误。),数据库的模型确定下来之后,我们有必要做一个系统内数据流向图,分析可能出现的瓶颈。 为了保证数据库的一致性和完整性,在逻辑设计的时候往往会设计过多的表间关联,尽可能的降低数据的冗余。(例如用户表的地区

数据库优化的注意点和建议

坚强是说给别人听的谎言 提交于 2019-12-17 19:08:21
1、分库分表 纵向分库分表 横向分库分表 2、减少join 适当使用冗余存储字段 3、使用索引 4、减少使用范围查询、减少子查询(使用join关联查询)、减少not使用 5、查看是否存在隐藏的字段转型 6、索引的可以创建联合索引、顺序索引的字段顺序,默认要分辨度越高越排在前面 7、不要烂用索引,创建无谓的索引 8、必须创建一个主键,主键的逻辑顺序最好和物理顺序一致 9、数据库优化器无法使用正确的索引,可以使用强制索引 force index(`索引名`) 10、尽量不要用mysql的group by ,可以从代码上多查询几次。或者业务代码里面进行分类 来源: CSDN 作者: 龙仔1984 链接: https://blog.csdn.net/ma_ru_long/article/details/103575363

Mysql安装、配置、优化

一个人想着一个人 提交于 2019-12-17 02:49:27
My SQL安装、配置、优化 一、MySQL是什么? 1.MySQL 是一个关系型数据库,使用 SQL 语言进行增删改查操作,目前属于 Oracle 旗下的产品。 2.MySQL 数据库开源免费,能够跨平台,支持分布式,性能也不错,可以和 PHP、Java 等 Web 开发语言完美配合,非常适合中小型企业作为 Web 数据库(网站数据库)。 二、My SQL的优点 1. MySQL 使用的 SQL 语言是用于访问数据库的最常用的标准化语言。 2. 由于 MySQL 数据库体积小、速度快、总体拥有成本低、开放源代码,其有着广泛的应用,一般中小型网站的开发都选择 MySQL 3.作为网站数据库。由于其社区版的性能卓越,因此搭配 PHP 和 Apache 服务器可组成良好的开发环境。 4.MySQL 数据库管理系统具有以下系统特性: 使用 C 和 C++ 编写,并使用多种编译器进行测试,保证源代码的可移植性。 支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows 等多种操作系统。 为多种编程语言提供了 API。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl等。 支持多线程,充分利用 CPU 资源。 优化的 SQL

mysql的优化(经典必看)

穿精又带淫゛_ 提交于 2019-12-16 17:37:11
mysql的优化(经典必看) 1、选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。 例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。 另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOTNULL ,这样在将来执行查询的时候,数据库不用去比较NULL值。 对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。 2、使用连接(JOIN)来代替子查询(Sub-Queries) MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来

【转】数据库优化 - SQL优化

泪湿孤枕 提交于 2019-12-16 16:17:02
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 目录 判断问题SQL 获取问题SQL SQL编写技巧 SQL优化 优化案例 总结 判断问题SQL 判断SQL是否有问题时可以通过两个表象(系统级别表象、SQL语句表象)进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长 应用的日志出现超时等错误 可以使用 sar 命令, top 命令查看当前系统状态。 也可以通过Prometheus、Grafana等监控工具观察系统状态。 SQL语句表象 冗长 执行时间过长 从全表扫描获取数据 执行计划中的rows、cost很大 冗长的SQL都好理解,一段SQL太长阅读性肯定会差,而且出现问题的频率肯定会更高。更进一步判断SQL问题就得从执行计划入手,如下所示: 执行计划告诉我们本次查询走了全表扫描Type=ALL,rows很大(9950400)基本可以判断这是一段"有味道"的SQL。 获取问题SQL 不同数据库有不同的获取方法,以下为目前主流数据库的慢查询SQL获取工具 MySQL 慢查询日志 测试工具loadrunner Percona公司的ptquery等工具 Oracle AWR报告 测试工具loadrunner等