下面的mysqld用法看起来不正确,那个时间戳! 任何人有任何想法,为什么这样疯了吗?
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 25662 mysql 16 0 139m 30m 5256 S 88.9 1.7 312:17.23 mysqld 20200 apache 16 0 102m 14m 7548 S 5.0 0.8 0:01.42 httpd
当谈到MySQL,Apache和Lighttpd的configuration时,我是一个总的新手,但是mysql完全无能为力。 以下是我的my.conf。 我正在使用2GB内存的机器上运行,使用InnoDB,通过PDO连接。
[mysqld] set-variable=local-infile=0 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
完全默认从头开始,避免错误,帮助! 🙂
你一定要看看你的Processlist,看看哪个查询太慢了。
但是从你的“顶级”screenshout中,我会推荐你的my.cnf文件中的下列变化
[mysqld] thread_cache_size = 64 table_cache = 64 key_buffer = 64M sort_buffer_size = 256K read_buffer_size = 256K read_rnd_buffer_size = 256K tmp_table_size=16M max_heap_table_size=16M query_cache_size=64M query_cache_type=1 innodb_data_file_path = ibdata1:1000M:autoextend innodb_buffer_pool_size = 768M innodb_additional_mem_pool_size = 8M innodb_flush_log_at_trx_commit = 1 innodb_support_xa = 0 innodb_lock_wait_timeout = 50 innodb_flush_method=O_DIRECT innodb_log_files_in_group = 2 innodb_log_file_size = 64M innodb_log_buffer_size = 8M innodb_thread_concurrency = 8
您可能需要在下次遇到此问题时在这里和那里进行一些调整,但这些设置对于眼前的问题是相当有用的。
首先,使用mysql或mysqladmin命令访问您的服务器,并使用它运行“show processlist”来检查当前正在运行的查询。
例如: mysqladmin -u root -p processlist
。 这会提示你input你的mysql root用户的密码(不同于你的普通root帐户),并显示当前正在运行的查询。
此外,您的设置可能会有所调整。 我已经find了mysqltuner.pl脚本,方便我指出从哪里开始。 请记住,这只是一个开始。 花几个小时来学习mysql性能调优的基础知识,是在这样一个重载服务器上的明智投资。
我会运行一个“显示进程列表”,看看你正在运行什么样的查询。 显然,坐在那里嚼了一段时间。
在QA期间打开一般查询日志 ,并对捕获的查询做一些说明。 我发现Web开发人员对我的数据库做的最常见的事情之一就是没有索引。 另一种方法是在频繁插入/更新/删除的表上放置一堆毫无意义的索引。 添加永不使用的索引只会伤害您的写入性能。 这里有很多信息,但值得申请。
我也会build议安装和监视sar / sysstat 。