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 配置完全是新手,但对 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
完全默认从头开始并避免错误,有帮助!:)
答案1
您一定要查看您的进程列表,看看哪个查询这么慢。
但是从你的“顶部”截图来看,我建议在你的 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
下次遇到此问题时,您可能需要在这里或那里做一些调整,但这些设置对于解决当前的问题非常有用。
答案2
首先,使用mysql或者mysql管理员命令访问您的服务器,并使用它来运行“show processlist”来检查当前正在运行的查询。
例如:mysqladmin -u root -p processlist
。这将提示您输入 mysql 根用户的密码(与您的常规根帐户不同),并显示当前正在运行的查询。
另外,可能需要稍微调整一下设置。我发现mysqltuner.pl脚本很方便,可以给我指明从哪里开始。请记住,这只是一个开始。在如此负载繁重的服务器上,花几个小时学习 mysql 性能调优的基础知识是一项明智的投资。
答案3
我会运行“show processlist”并查看您正在运行的查询类型。很明显,它已经在那里占用处理器一段时间了。