1 单条语句运行时间查询
使用SQL_NO_CACHA 查询不使用缓存,结果也存不进缓存。
set profiling=1;运行语句, 然后show profiles
2.多进程 insert into 语句丢失
1. 使用insert into tablename values(),(),()...语法。
2. 如果有索引,批处理插入前先把建索引disable了,插入完成后再从新建索引。
3. 插入前对表进行加锁,插入完后,再解锁。
4. 使用插入延迟,当客户使用插入延迟,服务器立刻返回,数据库自己对缓冲区做处理,延迟插入和数据库有关,innodb不支持。
5.使用 LOAD DATA INFILE,把文件中的数据直接映射成表。这个技术我认为实际上是利用了缓存加批处理,另外加上2、3、4的方式,所以速度超过。但是使用时要注意文件的编码格式。
果存在自增字段,MySQL会维护一个自增锁,和自增锁相关的一个参数为(5.1.22版本之后加入)
innodb_autoinc_lock_mode:可以设定3个值,0,1,2
0:traditonal (每次都会产生表锁) 1:consecutive (会产生一个轻量锁,simple insert会获得批量的锁,保证连续插入) 2:interleaved (不会锁表,来一个处理一个,并发最高
3 更改linux 服务器调度引擎,deadline 最适合mysql服务器 echo deadline > /sys/block/sda/queue/scheduler
4 更改numa策略,大部分Numa策略都会造成使用swap,除了mumactl -interleave=all
5 修改swappiness
cat /proc/sys/vm/swappiness
sudo gedit /etc/sysctl.conf
在这个文档的最后加上这样一行: vm.swappiness=106:扩大文件描述符7:禁用ext4的barrier8:设置CPU为最大能源模式9:query_cache 最好别用,如果想用额外缓存,那就用memcache,redis,如果使用了关闭时可要小心;10 : innodb_buffer_pool_size 是数据和索引缓存地方,越大越好5-6(8);11:interactive_timeout 服务器在关闭它前一个交互链接上等待行动的秒数,一个交互的客户被定义为对mysql_real_connect()的使用,改为7200;12:table_open_cache 指定表高速缓存的大小,每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。一些资料推荐把这个数值设置为(max_connections* 查询同时用到的表数)。我实践中发现,一般设置为max_connections就没问题了;13:max_allowed_packet.接受数据包大小;根据情况增加该变量,有时候大的插入和更新会受max_allowed_packet 参数限制,导致写入或者更新失败;14:skip_name_resolve 详情 http://www.cnblogs.com/ivictor/p/5311607.html