减lessMySQL的内存使用

结论:

  • 如果你真的想使用一点点的内存现成的下降MySQL和使用PostgreSQL :它有一个〜30Mo内存足迹,即比MySQLless10倍以上; 迁移很容易,不pipe是服务器端还是应用端(使用NHibernate)。

  • 在现实生活当然,你不会改变你的数据库保存300Mo,但如注意到你会注意到,而不是购买一些内存或注册一个更大的虚拟机,如果你是托pipe。


我在一台小型Windows Server 2008机器上安装了一个新的MySQL (less于1GB RAM )。

mysqld进程占用300MB400MB的内存,导致系统交换!

我读过这可以帮助:

  • 禁用InnoDB,但我需要它,
  • 调整InnoDB,但我的设置似乎使用已经很低的值(例如innodb_buffer_pool_size )。

有关这里的信息是my.iniconfiguration文件:

[client] no-beep port=3306 [mysql] default-character-set=utf8 [mysqld] port=3306 basedir="C:\Program Files\MySQL\MySQL Server 5.6\" datadir="C:\ProgramData\MySQL\MySQL Server 5.6\data\" character-set-server=utf8 default-storage-engine=INNODB sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" log-output=FILE general-log=0 general_log_file="my-pc.log" slow-query-log=1 slow_query_log_file="my-pc.log" long_query_time=10 log-error="my-pc.err" max_connections=100 query_cache_size=1M table_open_cache=2000 tmp_table_size=3M thread_cache_size=9 myisam_max_sort_file_size=100G myisam_sort_buffer_size=5M key_buffer_size=8M read_buffer_size=0 read_rnd_buffer_size=0 sort_buffer_size=0 innodb_additional_mem_pool_size=2M innodb_flush_log_at_trx_commit=1 innodb_log_buffer_size=1M innodb_buffer_pool_size=8M innodb_log_file_size=48M innodb_thread_concurrency=8 innodb_autoextend_increment=64M innodb_buffer_pool_instances=8 innodb_concurrency_tickets=5000 innodb_old_blocks_time=1000 innodb_open_files=300 innodb_stats_on_metadata=0 innodb_file_per_table=1 innodb_checksum_algorithm=0 back_log=70 flush_time=0 join_buffer_size=256K max_allowed_packet=4M max_connect_errors=100 open_files_limit=4110 query_cache_type=1 sort_buffer_size=256K table_definition_cache=1400 binlog_row_event_max_size=8K sync_master_info=10000 sync_relay_log=10000 sync_relay_log_info=10000 

这个MySQL服务器可能非常小:同时连接最多20个 ,不超过2GB的数据存储, 不需要高性能

有没有减less这个MySQL实例的内存占用的方法,还是已经是最低限度了?

在此先感谢您的帮助。

对于MySQL 5.6,以下my.ini使Windows 7 64位计算机上的“专用字节”从630MB降低到20MB,“工作集”从450MB降低到21MB。 像这样configuration的mysql服务器的性能可能会非常糟糕,但从技术上讲,如果你希望它占用尽可能小的内存,那么这就是答案。

 # MySQL Server Instance Configuration File [client] no-beep socket=0.0 port=3306 [mysql] default-character-set=utf8 # server_type=3 [mysqld] # skip-networking enable-named-pipe # shared-memory # shared-memory-base-name=MYSQL socket=MYSQL port=3306 # basedir="C:/Program Files/MySQL/MySQL Server 5.6/" datadir=C:/ProgramData/MySQL/MySQL Server 5.6/Data character-set-server=utf8 default-storage-engine=INNODB sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" # plugin-load=authentication_windows.dll log-output=FILE general-log=0 general_log_file="PEGASUS.log" slow-query-log=1 slow_query_log_file="PEGASUS-slow.log" long_query_time=10 # log-bin log-error="PEGASUS.err" server-id=1 max_connections=20 query_cache_size=0 table_open_cache=100 tmp_table_size=44M thread_cache_size=0 myisam_max_sort_file_size=100G myisam_sort_buffer_size=1M key_buffer_size=8 read_buffer_size=8K read_rnd_buffer_size=8K sort_buffer_size=32K # innodb_data_home_dir=0.0 # skip-innodb innodb_additional_mem_pool_size=1M innodb_flush_log_at_trx_commit=0 innodb_log_buffer_size=256K innodb_buffer_pool_size=1M innodb_log_file_size=48M innodb_thread_concurrency=9 innodb_autoextend_increment=64 innodb_buffer_pool_instances=2 innodb_concurrency_tickets=10 innodb_old_blocks_time=1000 innodb_open_files=10 innodb_stats_on_metadata=0 innodb_file_per_table=1 innodb_checksum_algorithm=0 back_log=5 flush_time=10 join_buffer_size=16K max_allowed_packet=1M max_connect_errors=100 open_files_limit=100 query_cache_type=2 table_definition_cache=400 binlog_row_event_max_size=8K sync_master_info=10000 sync_relay_log=10000 sync_relay_log_info=10000 host_cache_size=0 thread_stack=128K max_heap_table_size=16K bulk_insert_buffer_size=0 net_buffer_length=1K innodb_sort_buffer_size=64K binlog_cache_size=4K binlog_stmt_cache_size=4K performance_schema=0 

从这里取: michael.gr – 最小的MySQL内存占用