我正在使用32GB RAM的专用服务器上运行woocommerce安装。 服务器使用CentOS,nginx,php-fpm(带有opcache和apcu的版本7)和MariaDB。
服务器在日常电子商务操作中的表现非常出色。 我还在运行一个用于产品导入的自定义脚本,该脚本会进行大量密集的查询(使用库存,价格,说明和其他元信息来更新6-20种变化的产品)。
我一直在测量脚本的执行时间,它的运行时间最长为80秒。
问题在于,在最后几天中,脚本的运行速度极其缓慢,平均大约需要1500秒。
服务器或脚本本身没有更改。 我发现的唯一问题是,当脚本运行时,mariadb使用100%cpu(以前没有这种情况)。
这是my.cnf
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
innodb_buffer_pool_size = 13G
innodb_buffer_pool_instances = 8
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_file_per_table = 1
tmp_table_size = 128M
max_heap_table_size = 128M
table_open_cache = 4000
table_definition_cache = 4000
key_buffer_size = 64M
thread_cache = 64
query_cache_type = 1
query_cache_limit = 4M
query_cache_size = 64M
服务器似乎没有使用任何可用的内存,在脚本执行过程中,服务器仅使用了32GB可用内存中的768mb。
MariaDB在开始时必须使用13GB,这不是inno_db_pool_size的意义吗?
答案 0 :(得分:0)
要确定脚本的哪些部分较慢,请启用slow query log。
您在脚本中执行的查询与表结构,大小和索引(SHOW CREATE TABLE {tbl}
/ SHOW INDEXES FROM {tbl}
)相结合将确定其速度。
您的表很可能没有使用Innodb。要查看他们正在使用什么:
SELECT TABLE_SCHEMA, TABLE_NAME, ENGINE
FROM information_schema.TABLES
WHERE TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys');
答案 1 :(得分:0)
仅供大家参考,我才发现问题所在。
我正在遍历woocommerce中每种产品的所有变体,并且正在更新一些元数据(价格,库存等)。 问题在于,在每个变体循环之后,我都执行了wp_flush_cache,因此在下一个循环中,WordPress再次从数据库中获取了每条信息。
注释上述行将执行时间从1500秒减少到30秒。
所以问题绝不在于mariadb。