mysqld 问题

mysqld 问题

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”并查看您正在运行的查询类型。很明显,它已经在那里占用处理器一段时间了。

答案4

打开通用查询日志在 QA 期间,并对您捕获的查询进行一些解释。我发现 Web 开发人员对我的数据库做的最常见的事情之一是没有索引的排序。另一个是在频繁插入/更新/删除的表上放置一堆无意义的索引。添加从未使用过的索引只会损害您的写入性能。有很多信息这里,但值得应用。

我还建议安装和监控sar/系统状态

相关内容