2011-11-29 36 views
2

我的mysql只满足读取请求。我认为,完全利用缓存将是一个好主意。我在虚拟机中运行MySQL,这是在虚拟机内部运行的唯一应用程序。我为该VM分配2GB内存。我在虚拟机上使用了64位的centos。如果您认为它已经使用了可以使用的最大内存,那么我也可以为该VM分配更多内存。我对理解mysql设置和找出进程使用的内存占用不是很好,但我有兴趣学习如何进行。非常感谢您的帮助。增加MySQL的缓存能力

以上是一些相关的信息我的MySQL:

mysql> show global variables like "%cache%"; 
+------------------------------+----------------------+ 
| Variable_name    | Value    | 
+------------------------------+----------------------+ 
| binlog_cache_size   | 32768    | 
| have_query_cache    | YES     | 
| key_cache_age_threshold  | 300     | 
| key_cache_block_size   | 1024     | 
| key_cache_division_limit  | 100     | 
| max_binlog_cache_size  | 18446744073709547520 | 
| query_cache_limit   | 1048576    | 
| query_cache_min_res_unit  | 4096     | 
| query_cache_size    | 0     | 
| query_cache_type    | ON     | 
| query_cache_wlock_invalidate | OFF     | 
| table_cache     | 64     | 
| thread_cache_size   | 0     | 
+------------------------------+----------------------+ 
13 rows in set (0.00 sec) 


mysql> show global variables like "%buffer%"; 
+-------------------------------+---------+ 
| Variable_name     | Value | 
+-------------------------------+---------+ 
| bulk_insert_buffer_size  | 8388608 | 
| innodb_buffer_pool_awe_mem_mb | 0  | 
| innodb_buffer_pool_size  | 8388608 | 
| innodb_log_buffer_size  | 1048576 | 
| join_buffer_size    | 131072 | 
| key_buffer_size    | 8384512 | 
| myisam_sort_buffer_size  | 8388608 | 
| net_buffer_length    | 16384 | 
| preload_buffer_size   | 32768 | 
| read_buffer_size    | 131072 | 
| read_rnd_buffer_size   | 262144 | 
| sort_buffer_size    | 2097144 | 
+-------------------------------+---------+ 
12 rows in set (0.00 sec) 

mysql> show table status where name="items" 
    -> ; 
+-------+--------+---------+------------+-------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+ 
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time   | Update_time   | Check_time | Collation   | Checksum | Create_options | Comment | 
+-------+--------+---------+------------+-------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+ 
| items | MyISAM |  10 | Dynamic | 42667 |   346 | 14775916 | 281474976710655 |  1970176 |   0 |   341337 | 2009-07-22 13:31:00 | 2010-10-20 15:37:18 | NULL  | latin1_swedish_ci |  NULL |    |   | 
+-------+--------+---------+------------+-------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+ 

这是我的ulimit的输出-a

[[email protected] root]$ ulimit -a 
core file size   (blocks, -c) 0 
data seg size   (kbytes, -d) unlimited 
scheduling priority    (-e) 0 
file size    (blocks, -f) unlimited 
pending signals     (-i) 8191 
max locked memory  (kbytes, -l) unlimited 
max memory size   (kbytes, -m) unlimited 
open files      (-n) 1024 
pipe size   (512 bytes, -p) 8 
POSIX message queues  (bytes, -q) 819200 
real-time priority    (-r) 0 
stack size    (kbytes, -s) 10240 
cpu time    (seconds, -t) unlimited 
max user processes    (-u) 8191 
virtual memory   (kbytes, -v) unlimited 
file locks      (-x) unlimited 

请让我知道如果你需要更多的信息。

+0

Doggy SQL比其他任何东西都更致命。 – ajreal

+2

如果你想充分利用你的RAM,不要使用MyISAM存储引擎 - 只要忘记它。将表转换为InnoDB,并将'innodb_buffer_pool_size'的大小增加到您分配给虚拟机的内存的90%。缓存查询是好的,执行这些查询有什么不好的。这是数据从硬盘中取出的时间。 InnoDB将数据集的工作副本存储在RAM中,因此显着提高了性能。正如ajreal所言,狡猾的SQL是致命的。 –

回答

1

对于基本的统计和建议,你可以从mysqltuner.pl脚本开始。不要盲目应用建议,否则可能会降低性能。

MySQLTuner Github page

一个班轮获取最新版本的脚本并运行它:

curl -sSL mysqltuner.pl | perl 
2

您可以通过启用查询缓存实现快速的性能提升!

添加到您的my.cnf:

query_cache_type=1 
query_cache_limit=1M 
query_cache_size=32M 
0

也许你可以考虑使用memcached?然而,去InnoDB表应该立即改进(正如N.B.在评论中所说)