返回介绍

4.5 修改配置文件 my.cnf/my.ini

发布于 2024-10-03 00:33:42 字数 2487 浏览 0 评论 0 收藏 0

my.cnf(linux) 或者 my.ini(windows) 是 MySQL 数据库的配置文件,它存在多个地方,在/etc 目录,数据目录和用户主目录都有。放在不同位置,里面的选项有不同的作用范围,下面是 MySQL 读取配置文件的顺序和作用。

mysql 读取配置文件的顺序:

  • /etc/my.cnf Global options.
  • DATADIR/my.cnf Server-specific options.
  • defaults-extra-file The file specified with the --defaults-extra-file option.
  • ~/.my.cnf User-specific options.
max_connections = 1000
 # MySQL 的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多, 介于 MySQL 会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。可以过'conn%'通配符查看当前状态的连接 数量,以定夺该值的大小。

open_files_limit = 65535
 # MySQL 打开的文件描述符限制,默认最小 1024;当 open_files_limit 没有被配置的时候,比较 max_connections5 和 ulimit -n 的值,哪个大用哪个,
 # 当 open_file_limit 被配置的时候,比较 open_files_limit 和 max_connections5 的值,哪个大用哪个。

thread_concurrency = 8  #一般建议数量等于同 CPU 数量核数。
query_cache_size = 512M #重点优化参数(主库 增删改-MyISAM)
query_cache_limit = 2M  #指定单个查询能够使用的缓冲区大小,缺省为 1M

key_buffer_size = 384M
# key_buffer_size 指定用于索引的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,系 统将开始换页并且真的变慢了。对于内存在 4GB 左右的服务器该参数可设置为 384M 或 512M。通过检查状态值 Key_read_requests 和 Key_reads,可以知道 key_buffer_size 设置是否合理。比例 key_reads / key_read_requests 应该尽可能的低,至少是 1:100,1:1000 更好(上述状态值可以使用 SHOW STATUS LIKE ‘key_read%'获得)。注意:该参数值设置的过大反而会是服务器整体效率降低!

max_allowed_packet = 32M
# 增加该变量的值十分安全,这是因为仅当需要时才会分配额外内存。例如,仅当你发出长查询或 mysqld 必须返回大的结果行时 mysqld 才会分配更多内存。该变量之所以取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因偶然使用大的信息包而导致内存溢出。

table_cache = 512
# table_cache 指定表高速缓存的大小。每当 MySQL 访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的 状态值 Open_tables 和 Opened_tables,可以决定是否需要增加 table_cache 的值。如果你发现 open_tables 等于 table_cache,并且 opened_tables 在不断增长,那么你就需要增加 table_cache 的值了(上述状 态值可以使用 SHOW STATUS LIKE ‘Open%tables'获得)。注意,不能盲目地把 table_cache 设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能 不稳定或者连接失败。

提升性能的建议 :

  1. 如果 opened_tables 太大,应该把 my.cnf 中的 table_cache 变大
  2. 如果 Key_reads 太大,则应该把 my.cnfkey_buffer_size 变大。可以用 Key_reads/Key_read_requests 计算出 cache 失败率
  3. 如果 Handler_read_rnd 太大,则你写的 SQL 语句里很多查询都是要扫描整个表,而没有发挥索引的键的作用
  4. 如果 Threads_created 太大,就要增加 my.cnf 中 thread_cache_size 的值。可以用 Threads_created/Connections 计算 cache 命中率
  5. 如果 Created_tmp_disk_tables 太大,就要增加 my.cnf 中 tmp_table_size 的值,用基于内存的临时表代替基于磁盘的

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文