mysql数据库配置----全局参数设置

key_buffer_size
MyISAM索引缓冲,根据(key reads /Key_read_requests)判断
innodb_buffer_pool_size
InnoDB数据、索引、日志缓冲最重要的引擎参数,根据(hit riatos和FILE I/O)判断
wait_time_out
线程连接的超时时间,尽量不要设置的很大
max_connections
允许服务器最大连接数,尽量不要设置很大
thread_concurrency
线程并发利用数量(cpu+disk)*2,根据(OS中显示的请求队列和tickets)判断

注意:全局参数设置一经设置,随服务器启动预占用资源


mysql数据库配置----线程参数设置

sort_buffer_size
获得更快的--ORDER BY,GROUP BY,SELECT DISTINCT,UNION DISTINCTread_rnd_buffer_size 当根据键进行分类操作时获得更快的--ORDER BYjoin_buffer_sizeJoin连接使用全表扫描连接的缓冲大小,根据(Select_full_join )判断
read_buffer_size
全表扫描时为查询预留的缓冲大小,根据(Select_scan )判断
tmp_table_size
临时内存表超出设置,转化为磁盘表,根据(Created_tmp_disk_tables)判断 注意:线程参数设置的小影响性能,设置的大会导致服务器swap InnoDB ----专有优化参数 innodb_log_file_size (默认5M) 记录InnoDB 引擎redo log 的文件 较大的值意味着较长的故障崩溃恢复时间 Innodb_flush_method (默认fdatasync) linux系统可以使用O_DIRECT处理数据文件,避免OS级别的CacheO_DIRECT模式提高数据文件和日志文件的IO提交性能 innodb_flush_log_at_trx_commit (默认1) 0 表示每秒进行进行一次A和B操作。 1 表示在每次事务提交后执行一次A和B操作。 2 表示在每次事务提交后,执行一次B操作。 A--LOG数据写到CACHE B--FLUSH LOG 数据刷新到磁盘

规划设计-SQL优化
MySQL语句优化
语句优化-读语句
性能差的读语句

mysql> select count(*) as total from UserStatus_Log where 1;
+----------+
| count(*)|
+----------+
| 524288 | 
+----------+
1 row in set (1.68 sec)
mysql>
InnoDB引擎随记录越大执行越慢
CREATE TABLE `UserStatus_Log` (
`LogTime` datetime NOT NULL,
`UserId` int(11) NOT NULL,
`MobileNo` bigint(20) DEFAULT NULL,
`Sid` int(11) DEFAULT NULL,
`OpType` tinyint(3) unsigned DEFAULT NULL,
`RequestSource` smallint(6) DEFAULT NULL,
KEY `IX_PS_UserStatusLog_UserId_LogTime` (`UserId`,`LogTime`),
KEY `IX_PS_UserStatusLog_Sid` (`Sid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> create table table_count-> ( table_name varchar(64) not null default '' primary key,
-> total bigint unsigned not null default 0-> ) engine myisam;
Query OK, 0 rows affected (0.01 sec))
mysql> select count(*) as total from UserStatus_Log where 1 into @total;
Query OK, 1 rows affected (0.36 sec)
mysql>insert into table_count (table_name, total) values (‘UserStatus_Log’, @total);
Query OK, 1 rows affected (0.00 sec))
mysql>select * from table_count where table_name = ‘UserStatus_Log’;
+--------------------------+-----------+
| table_name | total |
+--------------------------+-----------+
| UserStatus_Log | 524288 |
+--------------------------+-----------+
1 row in set (0.00 sec)
语句优化-读语句 优化替代方法:
mysql> explain-> select count(*) as total from UserStatus_Log where 1;
+----+--------------+----------------------+--------+------------------+---------+---------+-----------+---------+-----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------+----------------------+--------+------------------+---------+----------+----------+----------+----------------+
| 1 | SIMPLE | UserStatus_Log| index | NULL | idx_id | 4 | NULL | 524288 | Using index | 
+----+--------------+-----------------------+--------+-------------------+--------+----------+----------+---------+-----------------+
1 row in set (0.01 sec)
语句优化-查询分析器

执行性能差的SQL分析结果

虽然使用了索引,但是还是进行了全表扫描

mysql> explain-> select table_name, total from table_count where table_name = ‘UserStatus_Log ’;
+----+--------------+----------------+---------+------------------+---------+----------+-----------+---------+-----------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------+----------------+---------+------------------+---------+----------+----------+----------+-----------+
| 1 | SIMPLE | table_count | system | primary | NULL | NULL | NULL | 1 | | 
+----+--------------+----------------+---------+------------------+---------+----------+----------+----------+-----------+
1 row in set (0.00 sec)
语句优化-查询分析器 优化后的SQL执行性能分析

因为仅有一行,这行的列值被优化器认为是常数。最多一行匹配,如const表执行,速度非常快!

MySQL Query Analyzer 
利用GUI工具去捕捉有性能问题的SQL语句,提高优化效率
quan-before-after