非root用户运行MySQL,当MySQL配置比较高时,MySQL运行中生效的参数值与配置的值不一样,所以具体分析一下MySQL是怎么调整这些参数值的。
这篇文章的目的是为了说明在系统资源不够的情况下,MySQL 是怎么调整者三个参数的。说明此文涉及到三个参数open_files_limit、 max_connections、 table_open_cache。与这三个参数相关的系统资源是打开文件数限制,即文件描述符(fd)限制。系统参数与文件描述符的关系 - max_connection & fd : 每一个MySQL connection 都需要一个文件描述符;
- table_open_cache & fd 打开一张表至少需要一个 文件描述符,如打开MyISAM需要两个fd ;
- 系统最大打开文件数可以通过 ulimit -n查看。MySQL调整参数的方式
根据配置(三个参数的配置值或默认值)计算 request_open_files(需要的文件描述符);
2.获取有效的系统的限制值effective_open_files; 3.根据effective_open_files调整request_open_files; 4.根据调整后的request_open_files,计算实际生效的参数值(show variables 可查看参数值)。计算request_open_filesrequest_open_files有三个计算公式:1. // 最大连接数+同时打开的表的最大数量+其他(各种日志等等)2. limit_1= max_connections+table_cache_size * 2 + 103. 4. //假设平均每个连接打开的表的数量(2-4)5. //源码中是这么写的:6. //We are trying to allocate no less than 7. // max_connections*5 file handles8. limit_2= max_connections * 59. 10. //mysql 默认的默认是500011. limit_3= open_files_limit ? open_files_limit : 500012. 13. 所以open_files_limit期待的最低14. request_open_files= max(limit_1,limit_2,limit_3)计算effective_open_files:MySQL 的思路:在有限值的的范围内MySQL 尽量将effective_open_files的值设大。 修正request_open_files
requested_open_files= min(effective_open_files, request_open_files)
重新计算参数值
修正open_files_limitopen_files_limit = effective_open_files
修正max_connections
max_connections 根据 request_open_files 来做修正。1. limit = requested_open_files - 10 - TABLE_OPEN_CACHE_MIN * 2
如果配置的max_connections值大于limit,则将max_connections 的值修正为limit
其他情况下 max_connections 保留配置值
修正table_cache_size
table_cache_size 会根据 request_open_files 来做修正1. // mysql table_cache_size 最小值,4002. limit1 = TABLE_OPEN_CACHE_MIN3. // 根据 requested_open_files 计算4. limit2 = (requested_open_files - 10 - max_connections) / 25. limit = max(limit1,limt2)
如果配置的table_cache_size 值大于limit,则将 table_cache_size 的值修正为limit
其他情况下table_cache_size 保留配置值
举例
以下用例在非 root 用户下运行
参数设置:
//mysql
max_connections = 500
table_open_cache = 999//ulimit -n
1500
生效的值:
open_files_limit = 1500 max_connections = min[(1500 - 10 - 800),500] = 500
table_open_cache = ( 1500 - 10 - 500) / 2 =495
MYSQL里面没有限制文件大小的语句,但是事实上你的文件是有大小限制的--受 *** 作系统的限制,比如32位 *** 作系统单个文件有2G大小的限制。你无法插入数据,要看具体的情况,除了上面说的文件大小超过2G,主要有一下两种可能:
一是插入的数据在唯一索引或者主键字段上有重复。看看表有那些索引,如果插入数据和以前的有重复当然就会失败,删除以前的数据当然就能插入了。这种情况下,插入数据的时候会报告相应的错误,错误详细信息有说明是哪个字段上的所有有重复。
二是数据表损坏,特别是假如你说你的表根本没有索引的时候,那么损坏的可能性就相当的大。这种情况下数据表可能是只读状态,也甚至可能是根本无法打开,插入失败的时候可能会报告数据表被别的进程占用。处理的方法是用MYSQL的系统工具进行修复,比如MYISAMCHK。
最多可以存储65535字节数据。
在mysql中,文本文件存储从0到65,535字节(64KB)的字节。因此,mysql中的文本最多可以存储65,535字节。
文本文件有四种类型:tinytext、Text、mediumtext和longtext,它们都具有相同的最大长度和存储需求。
扩展资料:
mysql的特点:
1.用C和c++编写,并使用各种编译器进行测试,以确保源代码的可移植性。
2、支持AIX、FreeBSD、hp-ux、Linux、MacOS、NovellNetware、OpenBSD、OS/2Wrap、Solaris、Windows等 *** 作系统。
3.api是为各种编程语言提供的。这些编程语言包括C、c++、Python、Java、Perl、PHP、Eiffel、Ruby、.net和Tcl。
4.支持多线程,充分利用CPU资源。
5、优化SQL查询算法,有效提高查询速度。
6、可以作为单独的应用程序应用在客户端服务器网络环境中,也可以作为嵌入式软件库嵌入到其他软件中。
7.提供多语言支持。通用代码如中文的GB2312、日文的BIG5和日文的Shift_JIS可以用作数据表名和数据列名。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)