【问题标题】:How do I allow mysqld to use more than 24.9% of my cpu?如何让 mysqld 使用超过 24.9% 的 cpu?
【发布时间】:2011-06-03 17:12:19
【问题描述】:

我有一个在 RHEL 上运行的 Web 服务器,它运行 Apache 和 MySQL。它有一个四核 3.2Ghz Xeon CPU 和 8 Gigs RAM 大多数时候,我们根本没有任何问题。

我们的网络应用程序是数据库密集型的。当我们的使用量变得相当大时,MySQL 将使用 24.9% 的 cpu。大多数时候,它徘徊在5%以下。我推测它只使用了 CPU 的一个核心,并且它与那个核心挂钩,但 TOP 在 cpu 列中向我显示,即使使用率保持在 24.9%,mysqld 也会更改核心。当它这样做时,MySQL 在排队查询时变得非常缓慢 是否有一些神奇的配置可以告诉 mysql 在需要时使用更多的 cpu?此外,关于我的配置的任何其他建议都会有所帮助。

我们在这台服务器上运行两个应用程序。一个运行 Innodb 但没有得到太多使用(它已被另一个应用程序取代),一个运行 MyIsam 并得到大量使用。总的来说,如果这很重要的话,我们的整个 mysql 数据目录大概是 13Gigs。

这是我的配置:

[root@ProductionLinux root]# cat /etc/my.cnf [mysqld] 服务器 ID = 71 日志-bin = /var/log/mysql/mysql-bin.log binlog-do-db = oldapplication binlog-do-db = newapplication binlog-do-db = 支持 线程缓存大小 = 30 key_buffer_size = 256M 表缓存 = 256 排序缓冲区大小 = 4M 读取缓冲区大小 = 1M 跳过名称解析 innodb_data_home_dir = /usr/local/mysql/data/ innodb_data_file_path = InnoDB:100M:autoextend 设置变量 = innodb_buffer_pool_size=70M 设置变量 = innodb_additional_mem_pool_size=10M 设置变量 = max_connections=500 innodb_log_group_home_dir = /usr/local/mysql/data innodb_log_arch_dir = /usr/local/mysql/data 设置变量 = innodb_log_file_size=20M 设置变量 = innodb_log_buffer_size=8M innodb_flush_log_at_trx_commit = 1 日志查询不使用索引 日志错误 = /var/log/mysql/mysql-error.log

这里有什么帮助吗?

mysql> 显示变量; +---------------------------------+---------------- -------------------------------------------------- ------------+ |变量名 |价值 | +---------------------------------+---------------- -------------------------------------------------- ------------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | | automatic_sp_privileges |开 | |后台日志 | 50 | |基于| /usr/local/mysql-standard-5.0.18-linux-x86_64-glibc23/ | | binlog_cache_size | 32768 | | bulk_insert_buffer_size | 8388608 | | character_set_client |拉丁语1 | |字符集连接 |拉丁语1 | |字符集数据库 |拉丁语1 | |字符集结果 |拉丁语1 | | character_set_server |拉丁语1 | |字符集系统 | utf8 | |字符集目录 | /usr/local/mysql-standard-5.0.18-linux-x86_64-glibc23/share/mysql/charsets/ | | collat​​ion_connection | latin1_swedish_ci | | collat​​ion_database | latin1_swedish_ci | |排序服务器 | latin1_swedish_ci | |完成类型 | 0 | |并发插入 | 1 | |连接超时 | 5 | |数据目录 | /usr/local/mysql/data/ | |日期格式 | %Y-%m-%d | |日期时间格式 | %Y-%m-%d %H:%i:%s | | default_week_format | 0 | | delay_key_write |开 | |延迟插入限制 | 100 | |延迟插入超时 | 300 | |延迟队列大小 | 1000 | | div_precision_increment | 4 | | engine_condition_pushdown |关闭 | | expire_logs_days | 0 | |冲洗 |关闭 | |冲洗时间 | 0 | | | ft_max_word_len | 84 | | ft_min_word_len | 4 | | ft_query_expansion_limit | 20 | | ft_stopword_file | (内置)| | group_concat_max_len | 1024 | |有存档|是 | |有_bdb |否 | | have_blackhole_engine |否 | |有压缩 |是 | |加密货币 |是 | |有_csv |否 | | have_example_engine |否 | | have_federated_engine |否 | |有几何 |是 | |有_innodb |是 | |有_isam |否 | |有_ndbcluster |否 | |有_openssl |否 | |有查询缓存 |是 | |有_raid |否 | |有_rtree_keys |是 | |有符号链接 |是 | |初始化连接 | | |初始化文件 | | |初始化奴隶 | | | innodb_additional_mem_pool_size | 10485760 | | innodb_autoextend_increment | 8 | | innodb_buffer_pool_awe_mem_mb | 0 | | innodb_buffer_pool_size | 73400320 | | innodb_checksums |开 | | innodb_commit_concurrency | 0 | | innodb_concurrency_tickets | 500 | | innodb_data_file_path | InnoDB:100M:自动扩展 | | innodb_data_home_dir | /usr/local/mysql/data/ | | innodb_doublewrite |开 | | innodb_fast_shutdown | 1 | | innodb_file_io_threads | 4 | | innodb_file_per_table |关闭 | | innodb_flush_log_at_trx_commit | 1 | | innodb_flush_method | | | innodb_force_recovery | 0 | | innodb_lock_wait_timeout | 50 | | innodb_locks_unsafe_for_binlog |关闭 | | innodb_log_arch_dir | /usr/local/mysql/数据 | | innodb_log_archive |关闭 | | innodb_log_buffer_size | 8388608 | | innodb_log_file_size | 20971520 | | innodb_log_files_in_group | 2 | | innodb_log_group_home_dir | /usr/local/mysql/数据 | | innodb_max_dirty_pages_pct | 90 | | innodb_max_purge_lag | 0 | | innodb_mirrored_log_groups | 1 | | innodb_open_files | 300 | | innodb_support_xa |开 | | innodb_sync_spin_loops | 20 | | innodb_table_locks |开 | | innodb_thread_concurrency | 20 | | innodb_thread_sleep_delay | 10000 | |交互超时 | 28800 | | join_buffer_size | 131072 | | key_buffer_size | 268435456 | | key_cache_age_threshold | 300 | | key_cache_block_size | 1024 | | key_cache_division_limit | 100 | |语言 | /usr/local/mysql-standard-5.0.18-linux-x86_64-glibc23/share/mysql/english/ | |大文件支持|开 | |大页面大小 | 0 | |大页 |关闭 | |许可证 |通用公共许可证 | |本地文件 |开 | |锁定内存 |关闭 | |日志 |关闭 | |日志_bin |开 | | log_bin_trust_function_creators |关闭 | |日志错误 | /var/log/mysql/mysql-error.log | | log_slave_updates |关闭 | | log_slow_queries |关闭 | |日志警告 | 1 | | long_query_time | 10 | |低优先级更新 |关闭 | |小写文件系统 |关闭 | |小写表名 | 0 | | max_allowed_pa​​cket | 1048576 | | max_binlog_cache_size | 18446744073709551615 | | max_binlog_size | 1073741824 | |最大连接错误 | 10 | |最大连接数 | 500 | | max_delayed_threads | 20 | |最大错误计数 | 64 | | max_heap_table_size | 16777216 | | max_insert_delayed_threads | 20 | | max_join_size | 18446744073709551615 | | max_length_for_sort_data | 1024 | | max_relay_log_size | 0 | | max_seeks_for_key | 18446744073709551615 | |最大排序长度 | 1024 | | max_sp_recursion_depth | 0 | | max_tmp_tables | 32 | | max_user_connections | 0 | | max_write_lock_count | 18446744073709551615 | |多范围计数 | 256 | | myisam_data_pointer_size | 6 | | myisam_max_sort_file_size | 9223372036854775807 | | myisam_recover_options |关闭 | | myisam_repair_threads | 1 | | myisam_sort_buffer_size | 8388608 | | myisam_stats_method | nulls_unequal | | net_buffer_length | 16384 | | net_read_timeout | 30 | | net_retry_count | 10 | | net_write_timeout | 60 | |新 |关闭 | |旧密码 |关闭 | | open_files_limit | 2510 | | optimizer_prune_level | 1 | |优化器搜索深度 | 62 | | pid_file | /usr/local/mysql/data/ProductionLinux.pid | |港口| 3306 | | preload_buffer_size | 32768 | |协议版本 | 10 | |查询分配块大小 | 8192 | |查询缓存限制 | 1048576 | | query_cache_min_res_unit | 4096 | |查询缓存大小 | 0 | |查询缓存类型 |开 | | query_cache_wlock_invalidate |关闭 | | query_prealloc_size | 8192 | | range_alloc_block_size | 2048 | |读取缓冲区大小 | 1044480 | |只读 |关闭 | | read_rnd_buffer_size | 262144 | |中继日志清除 |开 | |中继日志空间限制 | 0 | | rpl_recovery_rank | 0 | |安全身份验证 |关闭 | | server_id | 71 | |跳过外部锁定 |开 | |跳过网络 |关闭 | | skip_show_database |关闭 | | slave_compressed_protocol |关闭 | | slave_load_tmpdir | /tmp/ | | slave_net_timeout | 3600 | | slave_skip_errors |关闭 | | slave_transaction_retries | 10 | |慢启动时间 | 2 | |插座 | /tmp/mysql.sock | |排序缓冲区大小 | 4194296 | | sql_mode | | | sql_notes |开 | | sql_warnings |开 | |存储引擎 | MyISAM | |同步二进制日志 | 0 | |同步框架 |开 | |同步复制 | 0 | | sync_replication_slave_id | 0 | |同步复制超时 | 10 | | system_time_zone |科技部 | |表缓存 | 256 | | table_lock_wait_timeout | 50 | |表类型 | MyISAM | |线程缓存大小 | 30 | |线程堆栈 | 262144 | |时间格式 | %H:%i:%s | |时区 |系统 | |定时互斥体 |关闭 | | tmp_table_size | 33554432 | | tmpdir | | | transaction_alloc_block_size | 8192 | | transaction_prealloc_size | 4096 | | tx_isolation |可重复阅读 | | update_views_with_limit |是 | |版本 | 5.0.18-标准日志 | |版本评论 | MySQL 社区版 - 标准 (GPL) | | version_compile_machine | x86_64 | | version_compile_os |未知-linux-gnu | |等待超时 | 28800 | +---------------------------------+---------------- -------------------------------------------------- ------------+ 210 行(0.00 秒)

【问题讨论】:

    标签: mysql lamp


    【解决方案1】:

    您的服务器的内核可能很少。 (4 ? ) 当 sql 以 25% 运行时,它在单核上运行 100%,如果你想让它“更快”运行,你需要并行工作,我不知道它在 mysql 中是如何完成的,MS 有一些并行在他们的服务器中执行功能。

    【讨论】:

    • 在他的第二句话中,他说这是一个四核 cpu。 Mysql 5.0 默认是多线程的。
    • 但如果你不为 MT 编码,它将像单线程一样工作。
    • Dani:10 个并发查询应该分布在所有 CPU 上。它们都应该在一个 CPU 上运行。 RDBMS 引擎应该这样做:在 SQL Server 或 Oracle 或 Sybase 或其他成熟引擎上不为 MT 编码
    【解决方案2】:

    我想这取决于您的应用程序。如果它只使用一个到服务器的连接,所有对数据库的查询都将由一个数据库线程处理。

    此数据库服务器线程将运行在四核 cpu 的一个核心上,因此它只会使用 25% 的 cpu。

    【讨论】:

      猜你喜欢
      • 2010-09-21
      • 2022-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      相关资源
      最近更新 更多