Chinaunix首页 | 论坛 | 博客
  • 博客访问: 195743
  • 博文数量: 87
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 840
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-18 21:12
文章分类

全部博文(87)

文章存档

2014年(86)

我的朋友

分类: Mysql/postgreSQL

2014-06-10 13:38:41

控制并发最基本的方式是使用innodb_thread_concurrency变量,它限制了一次有多少线程能进入内核,0表示不限制进入内核的数量。
将innodb_thread_concurrency设置成2
如果当前的线程超过2个,并不限制用户访问mysql建立连接;
 只是当前已经有2个线程在处理,后面连接进来的线程需要等待前面的处理完,才可以接着处理。。。
 nnodb_thread_concurrency ,用于限制能够进入innodb层的线程数

 当进入innodb层调用read_row/write_row/update_row/delete_row时,会检查已经进入innodb的线程数:innodb_srv_conc_enter_innodb

如果已经满了,就会等待innodb_thread_sleep_delay毫秒尝试一次

 如果再次失败,则进入到一个FIFO队列sleep

当在innodb层完成操作后,会调用innodb_srv_conc_exit_innodb退出innodb层

 当线程进入时,获得一段时间片innodb_concurrency_tickets,在时间片范围内,该线程就无需检测,直接进入innodb

理论上讲,我们可以把innodb_thread_concurrency设置为(cpu数+磁盘数)*2,但这需要取决于具体的应用场景

innodb_commit_concurrency ,用于限制在innodb层commit阶段的线程数,大多数情况下,默认值已经足够。

--------------------------

innodb_write_io_threads

用于写脏页的线程数

innodb_read_io_threads

用于从磁盘读文件块的线程数

thread_cache_size

线程在使用完成后,不是退出,而是存放到list中,这样减小了重复创建线程的开销,

 这个值的设置应跟内存相关的:mem = (thread_cache_size) * (thread_stack)

 max_connections

 MySQL层最大允许的连接请求数,注意如果设置的过大,可能会引起很大的额外开销:线程切换开销。目前比较流行的优化方案是使用线程池 来保存请求队列,建立有限的work线程来处理连接,换句话说,就算max_connections设置的再大,那也要受innodb_thread_concurrency的 限制。
 

阅读(833) | 评论(0) | 转发(0) |
0

上一篇:yum 安装mysql

下一篇:symbolic-links

给主人留下些什么吧!~~