mysql内存数据库性能_Mysql内存表配置及性能测试

centos7 mysql数据库安装和配可以参考一下文章,基本照做就可以了(我选的方法二):

http://www.cnblogs.com/starof/p/4680083.html

说到内存表,首先有两个概念简单区分下:

1.临时表;2.内存表;

临时表与内存表的区分:

临时表是指使用create temprary

table创建的临时表.临时表可以使用任何存储引擎,临时表只在单个连接中可见,当连接断开时,临时表也会消失.

MySQL最初会将临时表创建在内存中,当数据变的太大后,就会转储到磁盘上.

内存表是指用memory引擎创建的表.表结构存在于磁盘,数据放在内存中.

临时表创建的条件:

1,查询中有排序(ORDER BY)和分组(GROUP BY)的操作

2,在排序中使用过滤重复列(DISTINCT)

3,查询中用SQL_SMALL_RESULT选项

遇到下列情况会将内存中的临时表写入磁盘:

1,表中存在BLOB和TEXT字段

2,分组或过滤的列超过512字节

3,查询中合并结果集的列超过512字节

如果起初在内存中创建的临时表变的太大,MySQL会自动将其转成磁盘上的临时表.

内存中的临时表由 tmp_table_size 和 max_heap_table_size 两个参数决定.这与创建MEMORY引擎的表不同.MEMORY引擎的表由max_heap_table_size参数决定表的大小,并且它不会转成到在磁盘上的格式.

当MySQL创建临时表时(包括内存上和磁盘上),都会增加Created_tmp_tables

状态值,如果MySQL在磁盘上创建临时表(包括从内存上转成磁盘的),都会增加 Created_tmp_disk_tables状态值.

****关于内存表和临时表的两个选项****

# 独立的内存表所允许的最大容量.

# 此选项为了防止意外创建一个超大的内存表导致用尽所有的内存资源.

# 设置范围16KB-4GB

max_heap_table_size = 64M

# 内部(内存中)临时表的最大大小

# 如果一个表增长到比此值更大,将会自动转换为基于磁盘的表.

# 此限制是针对单个表的,而不是总和.

tmp_table_size = 64M

下面具体说下内存表,首先创建表是跟普通建表类似,只是engine=MEMORY(5.5之后是用engine,之前是type,同时heap就是memory,最好使用memory)可创建。

对于我们常用的功能来说,内存表有以下特征:

1.对于varchar等变长类型,内存表使用固定的长度来存放;

2.内存表可以有非唯一键;

3.内存表不能包含BLOB或者TEXT列;

4.内存表支持AUTO_INCREMENT列;

5.内存表支持插入延迟,使读取优先;

6.非临时内存表和其它非内存表一样在所有客户端直接共享;

我们使用内存表的时候,需要注意以下几个方面:

1.服务器内存足够大;

2.我们创建的内存表和MySQL内部临时表有所不同:

3.当我们单独地delete from 某个内存表的时候,不会回收内存;只有当整个表被delete的时候,才会回收内存;

4.在MySQL的主从服务器上,内存表可以被复制

MySQL内存表容量受两个参数限制,分别是:max_heap_table_size和max_rows,其中max_rows可以在建表的时候添加max_rows = 10000类似的参数放在engine之后。

max_heap_table_size目前有三种修改方式,推荐第二种实测可行(第一没试,第三怎么都无法成功):

1、启动选项中修改

启动mysql的时候加参数  -O max_heap_table_size=64M 。

2、修改my.cnf

在[mysqld]的段中 增加 max_heap_table_size = 32M

3、在mysql客户端工具中修改

mysql>

set max_heap_table_size=32777216;

Query OK, 0

rows affected (0.00 sec)

mysql>

show variables like '%heap%';

+---------------------+----------+

|

Variable_name       | Value    |

+---------------------+----------+

|

max_heap_table_size | 32777216 |

+---------------------+----------+

1 row in set (0.00 sec)

具体服务器/etc/my.cnf配置如下,注意红色字体位置,特别注意修改配置文件的是在[mysqld]的段中 增加,有d:

# For advice on how to change settings please see

#

http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

[mysqld]

#

# Remove leading # and set to the amount of RAM for

the most important data

# cache in MySQL. Start at 70% of total RAM for

dedicated server, else 10%.

# innodb_buffer_pool_size = 128M

#

# Remove leading # to turn on a very important data

integrity option: logging

# changes to the binary log between backups.

# log_bin

#

# Remove leading # to set options mainly useful for

reporting servers.

# The server defaults are faster for transactions and

fast SELECTs.

# Adjust sizes as needed, experiment to find the

optimal values.

# join_buffer_size = 128M

# sort_buffer_size = 2M

# read_rnd_buffer_size = 2M

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent

assorted security risks

symbolic-links=0

# Recommended in standard MySQL setup

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

max_heap_table_size = 64M

[mysqld_safe]

log-error=/var/log/mysqld.log

配置大小根据实际需要调整,配置完成重启服务即可,service

mysqld restart。

性能测试使用mysql自带的mysqlslap,可以使用mysqlslap –help查看具体参数,我们测试直接使用一下语句修改下参数即可:

mysqlslap

--defaults-file=/etc/my.cnf --concurrency=200 --iterations=100

--create-schema=test --query=/home/hefj/test.sql  -uroot -pA747107C

其中concurrency为并发量,iterations为测试执行的迭代次数,create-schema为数据库名,query为sql文件(测试sql写好放到服务器上即可执行),后面就是数据库的链接参数,结果如下:

字面理解即可,通过并发除以平均时间可以算出每秒并发数

常用的选项参考:

--concurrency    并发数量,多个可以用逗号隔开

--engines       要测试的引擎,可以有多个,用分隔符隔开,如--engines=myisam,innodb

--iterations      要运行这些测试多少次

--auto-generate-sql        用系统自己生成的SQL脚本来测试

--auto-generate-sql-load-type    要测试的是读还是写还是两者混合的(read,write,update,mixed)

--number-of-queries           总共要运行多少次查询。每个客户运行的查询数量可以用查询总数/并发数来计算

--debug-info               额外输出CPU以及内存的相关信息

--number-int-cols

创建测试表的int型字段数量

--number-char-cols             创建测试表的chat型字段数量

--create-schema             测试的database

--query 自己的SQL

脚本执行测试

--only-print                 如果只想打印看看SQL语句是什么,可以用这个选项

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506923.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql字符集排序规则_MySQL原理 - 字符集与排序规则

任何计算机存储数据,都需要字符集,因为计算机存储的数据其实都是二进制编码,将一个个字符,映射到对应的二进制编码的这个映射就是字符编码(字符集)。这些字符如何排序呢?决定字符排序的规则就是排序规则。查看内置字符…

mysql服务器默认操作字符集,如何在mysql中找到默认服务器字符集?

Using MySQL on FreeBSD 8.2. How do I find out the default server character set? Is there some command I can run or file I can check?UPDATEActually I want to know how to find both the default server character set and the current server character set.解决方…

mysql异常修复_MySQL错误修复:Table xx is marked as crashed and last (automatic?) repair failed...

问题一 Table xx is marked as crashed and last (automatic?) repair failed有开发找到我,说数据库坏了,连不上数据库,看了下 MySQL 的错误日志,报错如下:Error: Table ./db_name/table_name is marked as crashed a…

mysql 改变表的类型吗_mysql中修改表类型所带来的问题探讨

对于MySQL数据库,如果你要使用事务以及行级锁就必须使用INNODB引擎。如果你要使用全文索引,那必须使用myisam,那如何修改修改MySQL的引擎为INNODB呢,下面介绍一个修改方法。对于MySQL数据库,如果你要使用事务以及行级锁就必须使用…

mysql 字符串 截取字母_MySQL字符串函数:字符串截取

MySQL 字符串截取函数:left(), right(), substring(), substring_index()。还有 mid(), substr()。其中,mid(), substr() 等价于 substring() 函数,substring() 的功能非常强大和灵活。1. 字符串截取:left(str, length)mysql> …

建立学生选课表 mysql 语句_学生选课数据库SQL语句45道练习题整理及mysql常用函数(20161019)...

学生选课数据库SQL语句45道练习题:一、 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)…

java mysql jsp分页代码_JAVA/JSP学习系列之六(MySQL翻页例子)

JAVA/JSP学习系列之六(MySQL翻页例子)更新时间:2006年10月13日 00:00:00 作者:一、运行前准备下载了mysql的jdbc驱动(一个jar文件)并加载在CLASSPATH(方法见《JAVA/JSP学习系列之一(JDK安装) 》)(如果找不到,请从本站下载)建一个MySQL数据库…

mysql内置含糊_mySQL入门04 内置函数

【欢迎关注,点赞,收藏,私信交流】字符串函数查看字符的ascii码值ascii(str),str是空串时返回0select ascii(a);查看ascii码值对应的字符char(数字)select char(97);拼接字符串concat(str1,str2...)select concat(12,34,ab);包含字…

mysql与citespace_CiteSpace与MySQL数据库的连接-科学网—博客.PDF

CiteSpace与MySQL数据库的连接-科学网—博客.PDFCiteSpace与MySQL数据库的连接1,2 3李杰 ,陈超美1.上海海事大学海洋科学与工程学院2.上海海事大学科技情报研究所3. Drexel University- College of Computing and InformaticsCiteSpace科技文本挖掘及可视化知识分享…

gcn代码pytorch_GCN的简单实现(pytorch)

import torch import torch.nn as nn import torch.nn.functional as Fimport networkx as nxdef normalize(A , symmetricTrue):# A AIA A torch.eye(A.size(0))# 所有节点的度d A.sum(1)if symmetric:#D D^-1/2D torch.diag(torch.pow(d , -0.5))return D.mm(A).mm(D)e…

mysql的check语言_check在SQL语句中的意思是什么?

展开全部在SQL中 CHECK 的意思:约束CHECK 约束用于限制列中的值的范围。如果对单个列定义 CHECK 约束,那么32313133353236313431303231363533e58685e5aeb931333365646261该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会在特定…

当电压放大电路的开路增益和输出电阻固定后_放大器的设计基础

放大器是电子电路(尤其是模拟电路)中的主要构件之一,使用放大器,它们会提高信号电平。放大器是一个术语,用于描述增加输入信号强度的电路。放大器广泛用于从音频应用到射频应用的各个领域中。但是,对于所有放大器,无论…

mysql数据库 auto_increment_mysql数据库 auto_increment

MySQL内核月报 2014.09-MySQL 捉虫动态auto_increment背景:Innodb引擎使用B_tree结构保存表数据,这样就需要一个唯一键表示每一行记录(比如二级索引记录引用)。Innodb表定义中处理主键的逻辑是:1.如果表定义了主键,就使用主键唯一…

javascript 嵌入python_通过Python将区块链数据嵌入Javascript,这是正确的方法吗?

你说得对。此页面是使用JavaScript异步填充的,因此BeautifulSoup和类似的工具将无法看到您试图获取的特定内容。但是,如果您记录浏览器的网络流量,您可以看到一些(XHR)httpget请求被发送到restapi,restapi以JSON形式提供其结果。这个JSON恰好包含您要查找的信息。它实际上会向不…

linux 嵌入式 快照_Linux 系统之Systemd

标签:子贡问为仁。子曰:“工欲善其事,必先利其器。居是邦也,事其大夫之贤者,友其士之仁者。”——孔子(春秋)《论语卫灵公》【工欲善其事,必先利其器】掌握一门技术,知道其发展历程是非常重要的…

mysql php 乱码问题_解决php与mysql中文乱码问题

感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧!MysqL对中文的支持程度还是很有限的,尤其是新手,但凡出现乱码问题,就会头大。乱码问题1:用PHPmyAdmin操作MysqL数据库汉字显示正常&…

mysql xdevapi_MySql Connector/C++8简介

MySql Connector/C8是一个用于连接MySQL服务器的C应用程序。Connector/C8可用于访问实现文档存储的 MySQL服务器,或者使用SQL查询以传统方式访问。它支持使用XDevAPI开发C 应用程序,或使用XDevAPI for C开发纯C应用程序,同时Connector/C8还支…

mysql随机选择记录表_Mysql表中取随机记录

RAND()是Mysql中的取随机数函数,该函数返回一个float型数值v,v的值为0 例如: mysql> SELECT RAND(); -> 0.9233482386203 mysql> SELECT RAND(20); -> 0.15888261251047 mysql> SELECT RAND(20); -> 0.15888261251047 mysq…

国家缩写大全 mysql_各个国家的名称缩写和时区列表

A字头AE-阿联酋(UNITED EMIRATES)AF-阿富汗(AFGHANISTAN)AL-阿尔巴尼亚(ALBANIA)AM-亚美尼亚(ARMENIA)AO-安哥拉(ANGOLA)AR-阿根廷(ARGENTINA)AT-奥地利(AUSTRIA)AU-澳大利亚(AUSTRALIA)AZ-阿塞拜疆(AZERBAIJAN(REPUBLIC))B字头BD-孟加拉(BANGLADESH)BE-比利时(BELGIUM)BF-布基…

lisp获取图名_cadlisp获取当前视图坐标

答:复制下面的脚本到命令行回车即可加载,输入pldd,程序会提示选择pline,选择pline后会打印所有的三维坐标 (defun c:pldd (/ wb cc ss1 aa pts bhbz ent) (setq ent (car (entsel "\n请选择PLINE"))) (setq wb (entget …