MySQL数据库如何实现正常优化

  

下文主要给大家带来MySQL数据库如何实现正常优化,希望这些内容能够带给大家实际用处,这也是我编辑MySQL数据库如何实现正常优化这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。

MySQL数据库优化:

前言:
在一个网站架构中,首先出现瓶颈的一定是数据库,其次是存储。
1,硬盘优化:不用虚拟机,用物理机(因为数据库是IO密集型的应用)
, CPU,64位CPU、百度为例:一台机分裂到8 - 16个颗器CPU。普通公司:2 - 4颗CPU。
b,内存(mem)百度为例:96 g - 128 g, 3 - 4个实例。普通公司:32 g - 64 g,跑2个实例。
c,磁盘(磁盘),数量越多越好。性能:SSD(高并发)比;SAS(普通业务线上)比;萨塔(线下)
突袭,4块盘:raid0比;raid10祝辞raid5祝辞raid1
d,网卡,多块网卡键,以及缓冲区,tcp优化。
2,软件优化
操作系统:x86_64系统
软件:mysql编译优化
3, my.cnf里参数的优化
注意:my.cnf里参数优化的幅度很小,大部分架构以及SQL语句优化。
思想:
监控:生产参数是一般情况下参数。
命令监控:显示全球地位\ G
调优工具:mysqlreport
案例:一些mysql的错误skip-name-resolve: http://blog.chinaunix.net/uid
- 7354272 - id - 2643611. - html
4, SQL语句的优化
,索引优化
1),白名单机制- - -百度,项目开发,DBA参与,减少上线后的慢SQL数量。
抓出慢SQL,配
置my . cnf中所做long_query_time=2
log-slow-queries=/数据/3306/slow-log.log
按天轮询:slow-log。日志
2),慢查询日志分析工具——-mysqlsla(推荐)
MySQLdumpslow, mysqlsla, myprofi, mysql-explain-slow-log, mysqllogfilter比较
3),每天晚上0点定时分析慢查询,发到核心开发,DBA分析及高级运维,首席技术官的邮箱里。
DBA分析给出优化建议——→核心开发确认更改——→DBA线上操作处理。
b,大的复杂的SQL语句拆分成多个小的SQL语句。
子查询,加入连表查询,某个表4000年万条记录。
c,数据库是存储数据的地方,但是不是计算数据的地方。,,
对数据计算,应用类处理,都要拿到前端应用解决。禁止在数据库上处理。
d,搜索功能,像‘%老男孩%’,一般不要用mysql数据库。
SQL语句的详细优化细节:
①能用定长字符类型的就不用varchar类型。
②数据库查询尽量不用选择,除非要查所有字段。
mysql>选择id、名称从测试;,不用mysql>选择,从测试;
③选择查询的时候,在条件后面的列类型如果是字符串类型就要加引号,如果是数字类型就不要加引号。
④如果一个条件列的前n个字符已经接近唯一值,就可以对一个列的前n个字符创建索引,不需要对整个列创建索引了。
⑤可以创建联合索引,但要注意前缀特性。如果要做复合索引,要把最常用的当做常用条件列的字段放在前面。
⑥可以用解释查看选择语句执行计划,慢查询日志或者显示完整processlist某语句长时间可以看到。
⑦能批量插入就批量插入,不要逐条插入。
mysql>插入测试值(& # 39;卑劣# 39;),(2)& # 39;oldgirl& # 39;),(3) & # 39;印加# 39;),(4日& # 39;祖马# 39;),(5 & # 39;卡卡# 39;);
⑧使用设置配置文件查看SQL语句的执行细节。
5架构上的优化
1),业务拆分:搜索功能,像‘%老男孩%’,一般不要用mysql数据库。
2),业务拆分:某些业务应用使用nosql持久化存储,例如:memcahcedb,复述,ttserver
粉丝关注,好友关系等等。
3),数据库前端必须要加缓存,例如:memcached,用户登录,商品查询。
4),动态的数据静态化。整个文件静态化,页面片段静态化。
5),数据库集群与读写分离。一主多从的,通过程序或者dbproxy进行集群读写分离。
6),单表超过2000多万。拆库拆表,人工拆库拆表(登录,商品,订单)
7),百度,阿里国内前×××司,会这样搞。
6,流程,制度,安全优化
任何一次人为数据库记录的更新,都要走一个流程:
,人的流程:开发——在核心开发,在运维或DBA
b,测试流程:内网测试,祝辞IDC测试,祝辞线上执行
c,客户端管理,phpmyadmin
有关mysql的innodb_flush_log_at_trx_commit参数:
innodb_flush_log_at_trx_commit=1
参数解释:
0:日志缓冲区将每秒一次地写入日志文件中,并且日志文件的冲洗(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作。
1:每次事务提交时mysql都会把日志缓冲区的数据写入日志文件,并且冲洗(刷到磁盘)中去,该模式为系统默认。
2:每次事务提交时mysql都会把日志缓冲区的数据写入日志文件,但是冲洗(刷到磁盘)操作并不会同时进行。该模式下,mysql会每秒执行一次冲洗(刷到磁盘)操作。

MySQL数据库如何实现正常优化