请大家评点一下这个老物理机在虚拟机上跑 MySQL 优化的配置参数,谢谢~

pppguest3962:物理机器性能:
机器的物理 CPU 是 E5,专门指定分了 2 个核给这台虚拟机
专门分配一个物理网口给虚拟机独享
内存:4G 独享
系统 CentOS 6.8
MySQL 版本是 5.1.73
磁盘 I/O 是 120mb/s 读写的水平吧

虚拟机只是拿来跑 MySQL 的,
大概 40 多张表,最大的表有 4 千万,都建有“合理的”索引

内网只有几台 PC 机使用它的服务,以前并发量平时都是 100 左右( MySQL 默认是 151,所以一点儿事都没有),
最近更新了本地程序,现在 1 秒同时并发最大量到了 2000,有提示:Too many Connection 的字样,
于是根据网上的知识点,和我这里的实际情况改了一下 CentOS 的内核参数和 MySQL 配置,

# sysctl 配置
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
fs.file-max=65535
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 800
net.ipv4.tcp_max_syn_backlog = 819200
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 3
net.core.netdev_max_backlog = 500000
net.core.somaxconn = 65536

# my.ini 配置
max_tmp_tables = 64
max_allowed_packet = 32M
max_connect_errors = 8000 
table_cache = 614
wait_timeout = 10
interactive_timeout = 10
max_connections=4096
back_log=600
wait_timeout=13
key_buffer_size = 128M
query_cache_size = 32M
read_buffer_size =16M
read_rnd_buffer_size = 16M
sort_buffer_size = 16M
read_rnd_buffer_size = 16M
thread_cache_size = 16
thread_concurrency = 8
open-files-limit = 10240

全部表的引擎都是 Myisam,程序操作没有事务的操作,对数据库的操作就是 INSERT/SELECT/UPDATE,
语句连 mysql 的函数运算都没有用到

程序上的所有连接都是单独的短连接,程序里没有长连接

优化的的期望是,除了增大接受的并发量,对于大量同时的 INSERT (同时 600 个短链接的过来),MySQL 是否可以先缓冲,然后慢慢写到表里?
老机器,I/O 确实不怎么样

不知道适合吗?

opengps:虚拟机的硬盘 io 损失很严重的,我的 gps 表单行 1k,物理硬盘可以 3000 ~ 4000,物理硬盘的虚拟机里只能 300 ~ 400

wangritian:1.wait_timeout=13 如果应用代码的短连接没有正确关闭的话,mysql 会保留 13 秒,此时支持的最大并发数是 max_connections/(wait_timeout+1),急病乱投医可以改成 1 试试,但我觉得不健康
2.并发量不小,继续用短连接,你的机器会变成握手狂魔
3.myisam 插入数据似乎是表锁,读写并发性能会被 innodb 吊打吧,而且你的业务写入量大,索引多了反而会降低写入性能

mysql 这种情况怎么查?

qaqLjj: 如图,怎么查询同时掌握了第一张表所有技能的员工呢? 也就是说,希望的结果如下: emp 神崎 相田

mysql 查询

shimingzhoudf:A 表有 1,2,3,4 个字段 我现在查询结果需要是这样 表名 中文名 1 2 3 4 数据 x x x x x ... ... .. .. .. .. 其实中文名就是 4 字段的值 我看别人这样写过: select 4 中文名, * where 表名; 但我自己用老报语法错误shimingzhoudf:语法是这样 select…

一个 mysql 库容纳多少个表会比较明显的影响速度?

l890908:理论上来说基本上没有限制(42 亿多),但是同时访问的表越多,文件描述符就越多,从操作系统角度来说还是有影响的;那么在实操过程中多少个表会比较明显的影响速度?qiayue:可以不用考虑极限了,按照业务分库分表即可。举例我们的统计 SDK,每个接入的 app 都给一个单独的库,这样不同 app 互不影响。

对于多字段的组合搜索条件, mysql 应该怎么设置索引

dajj:假设有一个列表界面, 有 10 个搜索条件, 每个条件对应表的某个字段,都是精确搜索。 但是表的数据有 100 万条。 这种情况下,复合索引无法设置,因为字段组合太多. 那么,有没有通用的解决方案,可以设置索引,让任何条件的搜索都能很快?v2exblog:同问

Mysql 数据库锁的一个问题

huntcool001:默认隔离级别 可重复读, autocommit=1, 建表:CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `age` tinyint(3) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_age` (`ag…