MyISAM

MySQL5.5 MyISAM与InnoDB引擎读写性能对比

不问归期 提交于 2020-02-28 17:15:08
MySQL5.5 MyISAM与InnoDB引擎读写性能对比 作者:陈明乾 发布日期:2014-01-06 09:48:33 注,测试环境 CentOS 6.4 x86_64,软件版本 MySQL 5.5.35 (MySQL 5.5最新版),下载地址: http://dev.mysql.com/downloads/mysql/5.1.html#downloads。 一、前言 在上一篇博客中我们测试了MySQL 5.5 的TPS与rw request /s性能指标与MySQL5.1相比性能有了较大的提升。在后面的博客中我们又测试一下MySQL 5.1插入数据与查询数据的性能,从测试结果上看MyISAM引擎的性能要优于InnoDB引擎。在这篇博客中我们主要来测试一下MySQL 5.5的MyISAM引擎与InnoDB引擎的插入数据与查询数据的性能并与MySQL 5.1进行对比,看看MySQL 5.5 对MyISAM与InnoDB引擎改进多少。 二、概述 1.环境准备 (1).安装yum源 01. [root@node7 src]# wget http://mirrors.hustunique.com/epel/6/x86_64/epel-release-6-8.noarch.rpm 02. --2014-01-05 17:37:53-- http://mirrors.hustunique

FLUSH TABLE WITH READ LOCK详解

坚强是说给别人听的谎言 提交于 2020-02-28 10:39:12
FLUSH TABLES WITH READ LOCK简称(FTWRL),该命令主要用于备份工具获取一致性备份(数据与binlog位点匹配)。 由于FTWRL总共需要持有两把全局的MDL锁,并且还需要关闭所有表对象,因此这个命令的杀伤性很大,执行命令时容易导致库hang住。如果是主库,则业务无法正常访问;如果是备库,则会导致SQL线程卡住,主备延迟。本文将详细介绍FTWRL到底做了什么操作,每个操作的对库的影响,以及操作背后的原因。 FTWRL做了什么操作? FTWRL主要包括3个步骤: 1.上全局读锁(lock_global_read_lock) 2.清理表缓存(close_cached_tables) 3.上全局COMMIT锁(make_global_read_lock_block_commit) FTWRL每个操作的影响 上全局读锁会导致所有更新操作都会被堵塞;关闭表过程中,如果有大查询导致关闭表等待,那么所有访问这个表的查询和更新都需要等待;上全局COMMIT锁时,会堵塞活跃事务提交。由于FTWRL主要被备份工具使用,后面会详细解释每个步骤的作用,以及存在的必要性。FTWRL中的第1和第3步都是通过MDL锁实现,关于MDL的实现,我之前总结了 MDL锁的文章 ,这里主要介绍清理表缓存的流程。 清理表缓存 每个表在内存中都有一个table_cache

浅谈高效使用MySQL

萝らか妹 提交于 2020-02-28 01:51:55
MySQL是目前经常使用的数据库。当我们需要处理几千万几亿几十亿这样级别的数据的时候,MySQL的性能至关重要,特别对于大量并发的服务器,数据库操作往往成为整个服务器的性能瓶颈。下面我分享一下一些基本的MySQL优化方法。 我们知道机器的选择,MySQL部署,MySQL数据的创建对性能的影响是最高的,下面分三点浅谈高效使用MySQL。 1. MySQL数据需要存储在硬盘中,每次写操作都需要直接的IO操作,所以选择固态硬盘存储MySQL数据可以大大提高其性能。 2. MySQL可以部署主从数据库,选择主库进行写操作,从库只允许读操作。对于有大量读操作的业务可以配置多个从库分担压力。存储的数据量很大可以分库分表,减少单个数据库和单张表的数据量提高读写性能。 3. 创建MySQL数据表需要选择合适的引擎,通常是MyISAM和InnoDB。创建数据表尽量简化数据,使用简单而且小的数据类型,能不用字符串的尽量不要使用。数据表索引尽量只针对关键字段创建,减少联合索引使用,有多个字段索引的可以合成一个索引,减少使用多个索引查询。 来源: oschina 链接: https://my.oschina.net/u/4455914/blog/3165949

MySQL实战学习(三)

左心房为你撑大大i 提交于 2020-02-27 15:52:14
MySQL实战学习(三) 索引 索引的常见模型 哈希表 有序数组 搜索树 哈希表 哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Value。 优点:做数据新增时,索引的建立会比较快。适用于等值查询的场景。 缺点:在进行数据区间查找时,会比较慢。 有序数组 由数组的特点可以知道,有序数组在等值查询和范围查询的场景的性能非常优秀。在有序数组中利用二分搜索可以快速的找到对应的值。但是当数据大量变动时,采用有序数组会导致性能降低。因此,有序数组索引只适用于静态存储引擎。 优点:有序数组在等值查询和范围查询场景中的性能就都非常优秀。 缺点:在需要更新数据的时候就麻烦了,你往中间插入一个记录就必须得挪动后面所有的记录,成本太高。 搜索树 二叉搜索树的特点是:每个节点的左儿子小于父节点,父节点又小于右儿子。这样如果你要查 ID_card_n2 的话,按照图中的搜索顺序就是按照 UserA -> UserC -> UserF -> User2 这个路径得到。这个时间复杂度是 O(log(N))。 优点:查询时间复杂度O(log(N)),更新时间复杂度O(log(N)) 缺点:数据库存储大多不适用二叉树,因为树高过高,会导致多次的硬盘数据读取,会适用N叉树 InnoDB的索引模型 InnoDB 使用了 B+ 树索引模型

可能是全网最好的MySQL重要知识点/面试题总结

拈花ヽ惹草 提交于 2020-02-27 13:26:07
标题有点标题党的意思,看了文章之后希望大家不会有这个想法,绝对干货!!!这篇花文章是我花了几天时间对之前总结的MySQL知识点做了完善后的产物,这篇文章可以用来回顾MySQL基础知识以及备战MySQL常见面试问题。 文末有公众号二维码,欢迎关注获取笔主最新更新文章,并可免费获取笔主总结的《Java面试突击》以及Java工程师必备学习资源。 @[toc] 什么是MySQL? MySQL 是一种关系型数据库,在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展。阿里巴巴数据库系统也大量用到了 MySQL,因此它的稳定性是有保障的。MySQL是开放源代码的,因此任何人都可以在 GPL(General Public License) 的许可下下载并根据个性化的需要对其进行修改。MySQL的默认端口号是 3306 。 事务相关 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行。 事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。 事物的四大特性(ACID)介绍一下? 原子性:

如何检查特定表的MySQL引擎类型?

孤街醉人 提交于 2020-02-27 12:25:29
我的MySQL数据库包含几个使用不同存储引擎的表(特别是myisam和innodb)。 如何找出哪个表使用哪个引擎? #1楼 要不就 show table status; 只是这将列出您数据库中的所有表。 #2楼 SHOW CREATE TABLE <tablename>\G 与输出相比,它的格式会更好 SHOW CREATE TABLE <tablename>; 对于许多其他查询/命令, \\G 技巧也很有用。 #3楼 转到information_schema数据库,你会找到'tables'表然后选择它; Mysql>使用information_schema; Mysql> select table_name,from tables from tables; #4楼 SHOW TABLE STATUS WHERE Name = 'xxx' 这将为您(以及其他)提供一个 Engine 列,这是您想要的。 #5楼 SHOW CREATE TABLE <tablename>; 比 SHOW TABLE STATUS 更易解析但更易读。 来源: oschina 链接: https://my.oschina.net/u/3797416/blog/3168496

python面试题 -- 网编并发

白昼怎懂夜的黑 提交于 2020-02-27 12:21:54
Python面试重点(进阶篇) 注意:只有必答题部分计算分值,补充题不计算分值。 第一部分 必答题 简述 OSI 7层模型及其作用?(2分) # 应用层:文件传输,文件管理,电子邮件的信息处理# 表示层:确保一个系统的应用层发送的消息可以被另一个系统的应用层读取,编码转换,数据解析,管理数据的解密和加密# 会话层:验证访问和会话管理# 传输层:为应用程序之间提供端对端的逻辑通信。# 网络层:选择合适的网间路由完成两个计算机之间的多个数据链路,通过路由协议和地址解析协议(ARP)。IP,RIP(路由信息协议),OSPF(最短路径优先协议)# 数据链路层:在物理层提供的比特流的基础上,建立相邻节点之间的数据链路,不可靠的物理介质提供可靠传输 ppp协议# 物理层:规定通信设备,通信链路的特性 简述 TCP三次握手、四次回收的流程。(3分) # 第一次握手:客户端首先向服务端发起连接,这时TCP头部中的SYN标识位值为1,然后选定一个初始序号seq=x(一般是随机的),消息发送后,A进入SYN_SENT状态,SYN=1的报文段不能携带数据,但要消耗一个序号。# 第二次握手:服务端收到客户端的连接请求后,同意建立连接,向A发送确认数据,这时TCP头部中的SYN和ACK标识位值均为1,确认序号为ack=x+1,然后选定自己的初始序号seq=y(一般是随机的),确认消息发送后,服务端进入SYN

在不使用mysqldump的情况下复制/复制数据库

蹲街弑〆低调 提交于 2020-02-27 08:02:11
没有本地访问服务器的权限,有没有办法在不使用 mysqldump 情况下将MySQL数据库(包含内容和不包含内容)复制/克隆到另一个数据库中? 我目前正在使用MySQL 4.0。 #1楼 如果您使用的是Linux,则可以使用以下bash脚本:(它可能需要一些其他的代码清理功能,但是它可以工作……并且比mysqldump | mysql快得多) #!/bin/bash DBUSER=user DBPASSWORD=pwd DBSNAME=sourceDb DBNAME=destinationDb DBSERVER=db.example.com fCreateTable="" fInsertData="" echo "Copying database ... (may take a while ...)" DBCONN="-h ${DBSERVER} -u ${DBUSER} --password=${DBPASSWORD}" echo "DROP DATABASE IF EXISTS ${DBNAME}" | mysql ${DBCONN} echo "CREATE DATABASE ${DBNAME}" | mysql ${DBCONN} for TABLE in `echo "SHOW TABLES" | mysql $DBCONN $DBSNAME | tail -n +2`;

Mysql设置sort_buffer_size

孤街浪徒 提交于 2020-02-27 06:20:14
sort_buffer_size mysql> show variables like ‘%sort_buffer_size%’; +————————-+———+ | Variable_name | Value | +————————-+———+ | innodb_sort_buffer_size | 1048576 | | myisam_sort_buffer_size | 8388608 | | sort_buffer_size | 262144 | +————————-+———+ 3 rows in set (0.00 sec) 默认256K 每个session 需要做一个排序分配的一个buffer,sort_buffer_size 不指定任何的存储引擎, 适用于一般的方式进行优化 如果你看到很多的ort_merge_passes per second mysql> SHOW GLOBAL STATUS like ‘%sort%’; +——————-+———-+ | Variable_name | Value | +——————-+———-+ | Sort_merge_passes | 1490 | | Sort_range | 1086174 | | Sort_rows | 23988490 | | Sort_scan | 213850 | +——————-+———-+ 4

如何获取mysql数据库的大小?

安稳与你 提交于 2020-02-27 04:53:42
如何获取mysql数据库的大小? 假设目标数据库称为“ v3”。 #1楼 另外,如果您使用的是 phpMyAdmin ,则可以在“数据库 structure 选项卡的页脚中查看表大小的总和。 实际的数据库大小可能会稍微超过该大小,但是似乎与上面提到的 table_schema 方法一致。 屏幕截图: #2楼 运行此查询,您可能会找到想要的东西: SELECT table_schema "DB Name", ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" FROM information_schema.tables GROUP BY table_schema; 该查询来自 mysql论坛 ,那里提供了更全面的说明。 #3楼 或者,您可以直接跳至数据目录并检查v3.myd,v3的组合大小。 myi和v3。 frm文件(用于myisam)或v3.idb和v3.frm(用于innodb)。 #4楼 要获得以MB为单位的结果: SELECT SUM(ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024), 2)) AS "SIZE IN MB" FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA =