mysql 64位性能对比_影响mysql性能的方面

一、服务器硬件

CPU+内存选择

并发量+QPS+mysql版本+32/64位CPU

QPS:每秒同时处理sql的数量

二、服务器操作系统

三、数据库存储引擎的选择-插件式存储

MyIsAM 不支持事务,表级锁

InnoDB 事务存储引擎,完美支持行级锁,事务ACID特性

四、数据库参数配置

查看mysql配置路径及相关配置

mysqld --verbose --help|grep -A 1 'Default options'

mysql --verbose --help|grep -A 1 'Default options'

参数作用域

全局参数

set global 参数名=参数值

set@@global.参数名:=参数值

会话参数

set[session]参数名=参数值

set@@session.参数名:=参数名字

内存相关的参数

确认可以使用的内存的上限

确认mysql连接使用的内存

确认操作系统保留多杀内存

sort_buffer_size

会话发送的语句需要进行排序时就会一次性分配对应的大小的缓存

join_buffer_size

应用程序经常会出现一些两表(或多表)Join的操作需求,MySQL在完成某些 Join 需求的时候(all/index join),为了减少参与Join的“被驱动表”的读取次数以提高性能,需要使用到 Join Buffer 来协助完成 Join操作。当 Join Buffer 太小,MySQL 不会将该 Buffer 存入磁盘文件,而是先将Join Buffer中的结果集与需要 Join 的表进行 Join 操作,然后清空 Join Buffer 中的数据,继续将剩余的结果集写入此 Buffer 中,如此往复。这势必会造成被驱动表需要被多次读取,成倍增加 IO 访问,降低效率。

read_buffer_size

是MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。

read_rnd_buffer_size

是MySQL的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。

缓冲池分配内存

innodb_buffer_size:

InnoDB使用该参数指定大小的内存来缓冲数据和索引,这个是Innodb引擎中影响性能最大的参数。{总内存-(每个线程所需内存*连接数)-系统保留内存)}

key_buffer_size

myisam决定索引处理的速度,尤其是索引读的速度。默认值是16M,通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用'key_read%'获得用来显示状态数据)。key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值。设置改制大小可通过以下语句获取。

select sum(index_length) from information_schema.tables where engine='myisam';

innodb_log_file_size:

这个值设置redo log文件的大小。

innodb_log_files_in_group:

这个值设置redo log文件的个数

innodb_log_buffer_size

redo log缓存池的大小。

innodb_flush_log_at_trx_commit

这参数设置了mysql redo log刷新到日志文件的方式。该参数设置有以下三个值:

0:每隔一秒mysql将redo log buffer中的数据刷新到操作系统cache中,并刷新到磁盘中,但是事务提交操作并不会引起任何操作。这样会至少丢失1秒钟的数据。

1:在每次事务提交执行log写入cache,并将数据刷新到磁盘。(系统默认设置)

2:事务提交时会将数据刷新到操作系统的cache中,但是并不会引起数据刷新到磁盘中,这样在系统崩溃时候有可能造成1s的数据丢失。

innodb_flush_method

这个参数控制着innodb数据文件及redo log的打开、刷写模式。

fdatasync

调用fsync()去刷数据文件与redo log的buffer。(默认)

O_DSYNC

innodb会使用O_SYNC方式打开和刷写redo log,使用fsync()刷写数据文件。

O_DIRECT

innodb使用O_DIRECT打开数据文件,使用fsync()刷写数据文件跟redo log。

innodb_double_wirte

双写缓存 ,用来缓存保护数据避免写数据块时造成了数据块损坏。

五、表结构的设计和SQL语句

设计数据库的步骤

需求分析

全面了解产品设计的存储需求

存储需求

数据处理需求

数据的安全性和完整性

逻辑设计

设计数据的逻辑存储结构

数据实体之间的逻辑关系,解决数据沉余

数据维护异常

物理设计

根据所使用的数据库特点进行表结构设计

关系型数据库:oralce sqlserver mysql postgressql

非关系型数据库:mongo redis hadoop

维护优化

根据实际情况对索引,存储结构进行优化

数据库设计规范

所有表中的所有指端具有单一属性

单一属性的列是由基本的数据类型所构成

设计出来的表是简单的二维表

一个表中具有一个业务主键

六、慢查询- 数据表结构不合理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值