最近被阿里云的数据库要搞疯掉了
自打阿里云抽风,非要取消myisam引擎,都换成innodb
没事总是主备切换,也没有错误日志
一问客服就是物理机波动,擦,波动是什么????????
服务器自己跳舞了吗
看了看参数设置,很多都不知道
这两天有时间自己搜索整理了下
发给大家,有需要的看看
我的服务器应用主要是WEB网站服务
有一些不懂的地方或者不对的地方,还请大牛不吝赐教!
回复在评论中就可以了,thank you
我是K哥
auto_increment_offset表示自增长字段从那个数开始,他的取值范围是1 .. 65535
auto_increment_increment表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535
back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。
也就是说,如果MySql的连接数据达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。
将会报:unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接进程时.
back_log值不能超过TCP/IP连接的侦听队列的大小。若超过则无效,查看当前系统的TCP/IP连接的侦听队列的大小命令:cat /proc/sys/net/ipv4/tcp_max_syn_backlog目前系统为1024。
对于Linux系统推荐设置为小于512的整数。
修改系统内核参数,查看mysql 当前系统默认back_log值, 查看当前数量命令:show variables like "back_log";
我给了3000
binlog_cache_size (global)默认即可
Binlog Cache 用于在打开了二进制日志(binlog)记录功能的环境,是 MySQL 用来提高binlog的记录效率而设计的一个用于短时间内临时缓存binlog数据的内存区域。
一般来说,如果我们的数据库中没有什么大事务,写入也不是特别频繁,2MB~4MB是一个合适的选择。但是如果我们的数据库大事务较多,写入量比较大,可与适当调高binlog_cache_size。同时,我们可以通过binlog_cache_use 以及 binlog_cache_disk_use来分析设置的binlog_cache_size是否足够,是否有大量的binlog_cache由于内存大小不够而使用临时文件(binlog_cache_disk_use)来缓存了。
Binlog_cache_use 显示 事务的数量被用于这个buffer(也可能是临时文件)用于存储语句。
Binlog_cache_disk_use 显示多少的事务数 必须得使用临时文件
这两个变量能用于调整binlog_cache_size 到一个足够大的值来避免使用临时文件
mysql> show status like "binlog_%";
+-----------------------+------------+
| Variable_name | Value |
+-----------------------+------------+
| Binlog_cache_disk_use | 102374 |
| Binlog_cache_use | 1549499037 |
character_set_server: 服务器安装时指定的默认字符集设定。
character_set_database: 数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
concurrent_inser:在MyISAM里读写操作是串行的,但当对同一个表进行查询和插入操作时,为了降低锁竞争的频率,根据concurrent_insert的设置,MyISAM是可以并行处理查询和插入的:
当concurrent_insert=0时,不允许并发插入功能。
当concurrent_insert=1时,允许对没有洞洞的表使用并发插入,新数据位于数据文件结尾(缺省)。
当concurrent_insert=2时,不管表有没有洞洞,都允许在数据文件结尾并发插入。
connect_timeout,默认10没问题
该参数控制在与服务器建立连接的时候等待三次握手成功的超时时间,该参数主要是对于网络质量较差导致连接超时,建议外网访问波动较大可以提高该参数。
default_time_zone,MySQL的时区
default_week_format, week()函数使用的默认周格式。
delayed_insert_limit用于控制写入数量,每次handler写入磁盘的数据达到此限制后会查看是否有阻塞的select操作,如果有则允许其优先执行,以避免过分阻塞读操作
delayed_insert_timeout当队列为空时,handler在等待规定的时间后会自动退出
delayed_queue_size用于控制队列大小(每个表可对应一个),默认100,如队列已满则initiator需要等待直到有足够空间为止
delay_key_write:是指在表关闭之前,将对表的update操作更新数据到磁盘,而不更新索引到磁盘,把对索引的更改记录在内存。(这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行)
这样MyISAM表可以使索引更新更快。在关闭表的时候一起更新索引到磁盘。
写入多开,读取多关
div_precision_increment:小数位精度控制,默认4就是0.0000
default-storage-engine(设置MySQL的默认存储引擎)
default-storage-engine= InnoDB(设置InnoDB类型,另外还可以设置MyISAM类型)
设置创建数据库及表默认存储类型
show table status like ‘tablename’显示表的当前存储状态值
查看MySQL有哪些存储状态及默认存储状态
show engines;
创建表并指定存储类型
CREATE TABLE mytable (id int, title char(20)) ENGINE = INNODB;
修改表存储类型:
Alter table tableName engine =engineName
备注:设置完后把以下几个开启:
# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = /var/lib/mysql
#innodb_data_file_path = ibdata1:1024M;ibdata2:10M:autoextend(要注释掉,否则会创建一个新的把原来的替换的。)
innodb_log_group_home_dir = /var/lib/mysql
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 1000M
innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 500M
innodb_log_buffer_size = 20M
innodb_flush_log_at_trx_commit = 0
innodb_lock_wait_timeout = 50
设置完后一定记得把MySQL安装目录地址(我们目前是默认安装所以地址/var/lib/mysql/)下的ib_logfile0和ib_logfile1删除掉。否则重启MySQL起动失败。
ft_min_word_len:指定被索引的关键词的最小长度。注意:在更改该参数值后,索引必须重建!
ft_query_expansion_limit 20 0 1000 MyISAM引擎表使用 with query expansion 进行全文搜索的最大匹配数
group_concat_max_len:无要求默认即可
MySQL提供的group_concat函数可以拼接某个字段值成字符串,如 select group_concat(user_name) from sys_user,默认的分隔符是 逗号,即"," ,如果需要自定义分隔符可以使用 SEPARATOR
如:select group_concat(user_name SEPARATOR "_") from sys_user
但是如果 user_name 拼接的字符串的长度字节超过1024 则会被截断。
通过命令 "show variables like "group_concat_max_len" " 来查看group_concat 默认的长度:
mysql> show variables like "group_concat_max_len";
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| group_concat_max_len | 1024 |
+----------------------+-------+
1 row in set
在MySQL配置文件中添加配置:group_concat_max_len = -1 (-1为最大值或根据实际需求设置长度),配置后需要重启MySQL服务,查看如下所示:
mysql> show variables like "group_concat_max_len";
+----------------------+------------+
| Variable_name | Value |
+----------------------+------------+
| group_concat_max_len | 4294967295 |
innodb_adaptive_hash_index,默认启动即可
哈希(hash)是一种非常快的查找方法,一般情况下查找的时间复杂度为O(1)。常用于连接(join)操作,如SQL Server和Oracle中的哈希连接(hash join)。但是SQL Server和Oracle等常见的数据库并不支持哈希索引(hash index)。MySQL的Heap存储引擎默认的索引类型为哈希,而InnoDB存储引擎提出了另一种实现方法,自适应哈希索引(adaptive hash index)。
InnoDB存储引擎会监控对表上索引的查找,如果观察到建立哈希索引可以带来速度的提升,则建立哈希索引,所以称之为自适应(adaptive)的。自适应哈希索引通过缓冲池的B+树构造而来,因此建立的速度很快。而且不需要将整个表都建哈希索引,InnoDB存储引擎会自动根据访问的频率和模式来为某些页建立哈希索引。
根据InnoDB的官方文档显示,启用自适应哈希索引后,读取和写入速度可以提高2倍;对于辅助索引的连接操作,性能可以提高5倍。在我看来,自适应哈希索引是非常好的优化模式,其设计思想是数据库自优化(self-tuning),即无需DBA对数据库进行调整。
我是K哥
innodb_additional_mem_pool_size(global)
这个参数我们平时调整的可能不是太多,很多人都使用了默认值,可能很多人都不是太熟悉这个参数的作用。innodb_additional_mem_pool_size 设置了InnoDB存储引擎用来存放数据字典信息以及一些内部数据结构的内存空间大小,所以当我们一个MySQL Instance中的数据库对象非常多的时候,是需要适当调整该参数的大小以确保所有数据都能存放在内存中提高访问效率的。
这个参数大小是否足够还是比较容易知道的,因为当过小的时候,MySQL 会记录 Warning 信息到数据库的 error log 中,这时候你就知道该调整这个参数大小了。
根据MySQL手册,对于2G内存的机器,推荐值是20M。32G内存的 100M
innodb_autoinc_lock_mode:默认1即可
在5.1.22在之后,InnoDB为了解决自增主键锁表的问题,引入了参数innodb_autoinc_lock_mode。这个值为0时,每次申请自增主键时需要锁表。
这个参数的默认值是1,设为此值时,每次会“预申请”多余的id(handler.cc: compute_next_insert_id),而insert执行完成后,会特别将这些预留的id空出,动作就是特意将预申请后的当前最大id回写到表中。
innodb_concurrency_tickets控制了凭据的数量,凭据是对线程授权。thread进入INNODB中,会获得innodb_concurrency_tickets次数通行证,该线程在接下来的innodb_concurrency_tickets次进入到INNODB中不需要再进行检查,可直接进入。默认吧
innodb_large_prefix。这个参数默认值是OFF。当改为ON时,允许列索引最大达到3072。
看不懂默认把OFF
innodb_lock_wait_timeout:默认50即可
指的是事务等待获取资源等待的最长时间,超过这个时间还未分配到资源则会返回应用失败;参数的时间单位是秒,最小可设置为1s(一般不会设置得这么小),最大可设置1073741824秒(34年,一条语句锁等待超过30分钟估计业务该有反馈了)
默认安装时这个值是50s(公司的默认参数设置)
innodb_max_dirty_pages_pct,默认75,但我觉得可以少点
这个百分比是,最大脏页的百分数,当系统中 脏页 所占百分比超过这个值,INNODB就会进行写操作以把页中的已更新数据写入到磁盘文件中。
innodb_old_blocks_pct参数可以控制进入缓冲区sublist of old blocks区域的数量,默认是37,占整个缓冲池的比例为3/8。当全表扫描一个大表,或者做MySQLdump时,就可以将innodb_old_blocks_pct设置得小些,例如,设置innodb_old_blocks_pct=5,使数据块进入少量sublist of old blocks区域,并移动到sublist of new blocks区域,从而让更多的热数据不被踢出。当你访问一个小表,或者select查询结果很少时,则可以保持默认的innodb_old_blocks_pct=37,或者设置得更大,比如innodb_old_blocks_pct=50。
读多写少,我就改成5了。
InnoDB_old_blocks_time:默认0 即可
当用户需要访问数据时,InnoDB首先会在InnoDB缓冲池查找数据,如果缓冲池中没有数据时,InnoDB会将硬盘上的数据块插入到InnoDB缓存池中;如果InnoDB缓冲池已满,InnoDB通过LRU算法清楚InnoDB缓存池中个别数据块。每当有新数据块需要加载到InnoDB缓冲池中时,该数据块应变为‘‘数据页’’被插到midpoint的位置,并声明为old数据页。那么old数据页什么时候能移动到new Page链表中呢?
(1)当InnoDB_old_blocks_time的参数值设置为0时。当old部分的数据页被访问到时,该数据页会被提升到链表的头部,并被标记为new数据页。
(2)当InnoDB_old_blocks_time的参数值大于0时(以1000毫秒或者1秒为例)。old部分数据页插入缓冲池后,1秒之后被访问,该数据页会被提升到链表的头部,并被标记为new数据页。在刚插入到一秒内,即便old部分的数据页被访问,该数据页也不会移动到new链表的头部。
innodb_open_files:
这个变量只有你在InnoDB中使用多个表空间时是相关的。它指定InnoDB可以在同一时间保持打开.ibd文件的最大数量。最小值是10。默认值是300。
.ibd文件使用的文件的描述符只用于InnoDB。它们独立于由–open-files-limit服务器选项指定的,且不影响表缓存的操作。
这边我设置的3000,有没有命令可以查看这个参数够不够
innodb_purge_batch_size:
当开启独立线程清除undo页时,表示一次删除多少个页。默认是20,不支持动态修改,一般不需要更改。
Innodb_purge_threads:控制是否使用独立purge线程
Purge操作会克隆最老旧的read_view,这个read_view中持有控制信息以限制哪些由其他事务引起的变化是可见的。然后以相反的方式读取从最老的到最近的undolog记录;如果当前运行的事务都没有引用这些记录,则分析这些记录并从索引上移除被标记删除的记录。
不懂,有没有白话讲解
innodb_read_ahead_threshold参数:默认56即可,效果不大
它控制一个区中多少页被顺序访问时,InnoDB才启用预读取,预读取下一个页中所有的页。
innodb_read_io_threads和Innodb_write_io_threads取代此版本之前参数,该参数值之和=2*cpu个数*cpu核数;如果你的系统读>写,可以设置innodb_read_io_threads值相对大点;反之,也可以.
interactive_timeout和wait_timeout,建议1800,30分钟
interactive_timeout:交互式连接超时时间(mysql工具、mysqldump等)
wait_timeout:非交互式连接超时时间,默认的连接mysql api程序
innodb_rollback_on_timeout
该变量默认值为OFF,如果事务因为加锁超时,会回滚上一条语句执行的操作。如果设置ON,则整个事务都会回滚。
innodb_stats_method(统计有关的参数)
Nulls_equal:所有Null都相等,即算作一个value group;若Null过多则会导致average group size偏大
Nulls_unequal:所有Null互不相同,每个算作一个value group;如果non-null group size过大且null数量过多,此设置会拉低整体的average group size,可能导致滥用索引
Nulls_ignored:忽略Null
看不懂,默认把
innodb_stats_on_metadata,默认关闭即可
对INFORMATION_SCHEMA中的一些表进行查询操作,以方便索引统计信息,如果读要求高的建议关闭。
innodb_stats_sample_pages
INNODB通过抽样的方式来计算统计信息,首先读取少量的索引页面,默认是8个索引页面,新版本可通过innodb_stats_sample_pages来设置样本页的数量。
求详细解释
innodb_strict_mode,默认off即可
开启InnoDB严格检查模式,尤其采用了页数据压缩功能后,最好是开启该功能。开启此功能后,当创建表(CREATE TABLE)、更改表(ALTER TABLE)和创建索引(CREATE INDEX)语句时,如果写法有错误,不会有警告信息,而是直接抛出错误,这样就可直接将问题扼杀在摇篮里。
innodb_table_locks
是否允许使用表级锁。
MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。
MySQL这3种锁的特性可大致归纳如下。
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
从上述特点可见,很难笼统地说哪种锁更好,只能就具体应用的特点来说哪种锁更合适!仅从锁的角度来说:表级锁更适合于以查询为主,只有少量按索引条件更新数据的应用,如Web应用;而行级锁则更适合于有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用,如一些在线事务处理(OLTP)系统。这一点在本书的“开发篇”介绍表类型的选择时,也曾提到过。下面几节我们重点介绍MySQL表锁和InnoDB行锁的问题,由于BDB已经被InnoDB取代,即将成为历史,在此就不做进一步的讨论了。
我是K哥
innodb_thread_concurrency:默认0即可
InnoDB试着保持在InnoDB内并发的操作系统线程数量小于或等于这个变量给出的限制。一旦线程的数量达到此限制,其它线程被放入FIFO队列中进入等待执行的状态(additional threads are placed into a wait state within a FIFO queue for execution)。等待锁的线程不计入并发执行的线程数量。
该变量的正确值依赖于环境和负载。尝试一系列不同的值,以确定什么样的值适合您的应用。建议值是2倍的CPU数目加上磁盘的数量。
这个变量的范围是0到1000。值为0(默认)被解释为无限并发(无并发检查)。禁用线程并发检查使InnoDB可以创建它需要的那么多的线程。
innodb_buffer_pool_size(默认128M)
innodb_buffer_pool_size=1024M(1G)
innodb_buffer_pool_size:主要针对InnoDB表性能影响最大的一个参数。功能与Key_buffer_size一样。InnoDB占用的内存,除innodb_buffer_pool_size用于存储页面缓存数据外,另外正常情况下还有大约8%的开销,主要用在每个缓存页帧的描述、adaptive hash等数据结构,如果不是安全关闭,启动时还要恢复的话,还要另开大约12%的内存用于恢复,两者相加就有差不多21%的开销。假设:12G的innodb_buffer_pool_size,最多的时候InnoDB就可能占用到14.5G的内存。若系统只有16G,而且只运行MySQL,且MySQL只用InnoDB,
那么为MySQL开12G,是最大限度地利用内存了。
另外InnoDB和 MyISAM 存储引擎不同, MyISAM 的 key_buffer_size 只能缓存索引键,而 innodb_buffer_pool_size 却可以缓存数据块和索引键。适当的增加这个参数的大小,可以有效的减少 InnoDB 类型的表的磁盘 I/O 。
当我们操作一个 InnoDB 表的时候,返回的所有数据或者去数据过程中用到的任何一个索引块,都会在这个内存区域中走一遭。
可以通过 (Innodb_buffer_pool_read_requests – Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests * 100% 计算缓存命中率,并根据命中率来调整 innodb_buffer_pool_size 参数大小进行优化。值可以用以下命令查得:show status like "Innodb_buffer_pool_read%";
比如查看当前系统中系统中
| Innodb_buffer_pool_read_requests | 1283826 |
| Innodb_buffer_pool_reads | 519 |
+---------------------------------------+---------+
其命中率99.959%=(1283826-519)/1283826*100% 命中率越高越好。
innodb_log_buffer_size(默认8M)
innodb_log_buffer_size=20M
innodb_log_buffer_size 这是InnoDB存储引擎的事务日志所使用的缓冲区。类似于Binlog Buffer,InnoDB在写事务日志的时候,为了提高性能,也是先将信息写入Innofb Log Buffer中,当满足innodb_flush_log_trx_commit参数所设置的相应条件(或者日志缓冲区写满)之后,才会将日志写到文件 (或者同步到磁盘)中。可以通过innodb_log_buffer_size 参数设置其可以使用的最大内存空间。
InnoDB 将日志写入日志磁盘文件前的缓冲大小。理想值为 1M 至 8M。大的日志缓冲允许事务运行时不需要将日志保存入磁盘而只到事务被提交(commit)。 因此,如果有大的事务处理,设置大的日志缓冲可以减少磁盘I/O。 在 my.cnf中以数字格式设置。
默认是8MB,系的如频繁的系统可适当增大至4MB~8MB。当然如上面介绍所说,这个参数实际上还和另外的flush参数相关。一般来说不建议超过32MB
注:innodb_flush_log_trx_commit参数对InnoDB Log的写入性能有非常关键的影响,默认值为1。该参数可以设置为0,1,2,解释如下:
0:log buffer中的数据将以每秒一次的频率写入到log file中,且同时会进行文件系统到磁盘的同步操作,但是每个事务的commit并不会触发任何log buffer 到log file的刷新或者文件系统到磁盘的刷新操作;
1:在每次事务提交的时候将log buffer 中的数据都会写入到log file,同时也会触发文件系统到磁盘的同步;
2:事务提交会触发log buffer到log file的刷新,但并不会触发磁盘文件系统到磁盘的同步。此外,每秒会有一次文件系统到磁盘同步操作。
实际测试发现,该值对插入数据的速度影响非常大,设置为2时插入10000条记录只需要2秒,设置为0时只需要1秒,而设置为1时则需要229秒。因此,MySQL手册也建议尽量将插入操作合并成一个事务,这样可以大幅提高速度。根据MySQL手册,在存在丢失最近部分事务的危险的前提下,可以把该值设为0。
innodb_thread_sleep_delay:默认10000即可
当进入innodb层调用read_row/write_row/update_row/delete_row时,会检查已经进入innodb的线程数:innodb_srv_conc_enter_innodb
如果已经满了,就会等待innodb_thread_sleep_delay毫秒尝试一次
如果再次失败,则进入到一个FIFO队列sleep
interactive_timeout:1800即可30分钟
参数含义:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。
key_buffer_size,本系统目前为384M,可修改为400M
key_buffer_size=400M
key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),对MyISAM(MySQL表存储的一种类型,可以百度等查看详情)表性能影响最大的一个参数。如果你使它太大,系统将开始换页并且真的变慢了。严格说是它决定了数据库索引处理的速度,尤其是索引读的速度。对于内存在4GB左右的服务器该参数可设置为256M或384M.
怎么才能知道key_buffer_size的设置是否合理呢,一般可以检查状态值Key_read_requests和Key_reads ,比例key_reads / key_read_requests应该尽可能的低,比如1:100,1:1000 ,1:10000。其值可以用以下命令查得:show status like "key_read%";
比如查看系统当前key_read和key_read_request值为:
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Key_read_requests | 28535 |
| Key_reads | 269 |
+-------------------+-------+
可知道有28535个请求,有269个请求在内存中没有找到直接从硬盘读取索引.
未命中缓存的概率为:0.94%=269/28535*100%. 一般未命中概率在0.1之下比较好。目前已远远大于0.1,证明效果不好。若命中率在0.01以下,则建议适当的修改key_buffer_size值。
http://dbahacker.com/mysql/innodb-myisam-compare(InnoDB与MyISAM的六大区别)
http://kb.cnblogs.com/page/99810/(查看存储引擎介绍)
MyISAM、InnoDB、MyISAM Merge引擎、InnoDB、memory(heap)、archive
key cache下面3个配置不懂,大神解释下,什么热链暖连,根据什么设定?
key_cache_age_threshold:默认300
MyISAM中,如果key_buffer里的热链里的某个缓存块在这个变量所设定的时间里没有被访问过,MySQL服务器就会把它调整到暖链里去。这个参数值越大,缓存块在热链里停留的时间就越长。
key_cache_block_size
MyISAM中key_buffer缓存块的单位长度,以字节为单位,默认值为1024
key_cache_division_limit
控制着缓存块重用算法。默认值为100,此值为key_buffer_size中暖链所占的大小百分比(其中有暖链和热链),100意味着全是暖链。
log_queries_not_using_indexes:默认关闭即可
如果运行的SQL语句没有使用索引,则mysql数据库同样会将这条SQL语句记录到慢查询日志文件中。
long_query_time
慢查询的阈值。超过多少秒为慢,默认1
loose_rds_max_tmp_disk_space,默认10G足够了
用于控制MySQL能够使用的临时文件的大小,RDS初始默认值是10G,如果临时文件超出此大小,则会导致应用报错
loose_rds_sql_max_affected_rows:默认0
无,请大神帮忙补充
loose_rds_threads_running_high_watermark:默认50000最大即可
用于控制MySQL并发的查询数目,比如将rds_threads_running_high_watermark该值设置为100,则允许MySQL同时进行的并发查询为100个
low_priority_updates:默认0
低优先级更新。意思是,所有的写操作(表写锁),包括update,delete,insert等都需要等待读操作完成后才执行 (表读锁解开)。
因为是针对表的锁,所以,这里仅支持MyISAM.
读为主可以设置low_priority_updates=1,写的优先级调低
max_allowed_packet:开到最大就可以了
指mysql服务器端和客户端在一次传送数据包的过程当中最大允许的数据包的大小
查看目前配置show VARIABLES like "%max_allowed_packet%";
显示的结果为:
| Variable_name | Value
| max_allowed_packet | 1048576 |
以上说明目前的配置是:1M
注意:该值设置过小将导致单个记录超过限制后写入数据库失败,且后续记录写入也将失败。
max_connections参数值,
由默认的151,修改为3000(750M)。max_connections=3000
max_connections是指MySql的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySql会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。
MySQL服务器允许的最大连接数16384;
查看系统当前最大连接数:show variables like "max_connections";
max_user_connections值由默认的0,修改为800,max_user_connections=800
max_user_connections是指每个数据库用户的最大连接,针对某一个账号的所有客户端并行连接到MYSQL服务的最大并行连接数。
简单说是指同一个账号能够同时连接到mysql服务的最大连接数。
设置为0表示不限制。目前默认值为:0不受限制。
这儿顺便介绍下Max_used_connections:它是指从这次mysql服务启动到现在,同一时刻并行连接数的最大值。它不是指当前的连接情况,而是一个比较值。如果在过去某一个时刻,MYSQL服务同时有1000个请求连接过来,而之后再也没有出现这么大的并发请求时,则Max_used_connections=1000.请注意与show variables 里的max_user_connections的区别。默认为0表示无限大。
查看max_user_connections值show variables like "max_user_connections";
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!