Mysql

改進 MySQL 文本搜尋

  • February 13, 2017
  1. 哪些 MySQL 設置改進了文本搜尋?
  2. 首先添加哪些資源(記憶體、cpus、磁碟:ssd)以提高性能?

設置

  • 亞馬遜 RDS

    • 類型:db.t2.medium (2 CPU; 4G mem)
    • MySQL 5.6.27
  • 應用:Redmine 3.3.0

  • 沒有其他負載的簡單但非常通用的搜尋(例如:’the’)的響應時間:~15 秒。

  • 不使用 InnoDB FULLTEXT 索引

  • 關於Redmine DB的資訊: [--] Database: redmine [--] +-- TABLE: 81 [--] +-- COLL : 3 (utf8_general_ci, utf8_unicode_ci, latin1_swedish_ci) [--] +-- ROWS : 5114804 [--] +-- DATA : 1.3G(81.79%) [--] +-- INDEX: 288.5M(18.21%) [--] +-- TOTAL: 1.5G [--] +-- ENGIN : 1 (InnoDB)

MySQL 設置

binlog_cache_size: 32768 binlog_format: MIXED bulk_insert_buffer_size: 64000000 default_storage_engine: InnoDB explicit_defaults_for_timestamp: 1 gtid-mode: OFF innodb_buffer_pool_size: {DBInstanceClassMemory*3/4} innodb_file_per_table: 1 innodb_flush_method: O_DIRECT innodb_ft_cache_size: 80000000 innodb_log_buffer_size: 8388608 innodb_log_file_size: 134217728 key_buffer_size: 16777216 local_infile: 1 log_output: TABLE log_slave_updates: 1 master-info-repository: TABLE max_binlog_size: 134217728 max_connections: {DBInstanceClassMemory/12582880} max_heap_table_size: 512000000 performance_schema: 0 query_cache_limit: 512000 query_cache_size: 512000000 query_cache_type: 1 read_buffer_size: 262144 read_rnd_buffer_size: 524288 relay_log_info_repository: TABLE relay_log_recovery: 1 sync_binlog: 1 table_open_cache_instances: 16 thread_stack: 262144 tmp_table_size: 512000000

query_cache_size: 512000000加號query_cache_type: 1對性能真的很不利。

如果 QC 已打開,則對錶的每次修改都會導致 QC 中該表的所有行被清除。QC 越大,需要的時間越長。我建議尺寸只有 50M。或者關閉 QC。全部

“the” 是一個糟糕的測試案例,因為它(假設是英語)非常普遍。選擇一些只出現幾次的單詞。或者,一個詞出現一次,一個詞出現大約 10 次,一個詞出現 100 次。

max_heap_table_size: 512000000而且tmp_table_size: 512000000也很糟糕,因為它們佔 RAM 的 12%;降低到 RAM 的 1%。在復雜的查詢中,這些限制會發揮作用。如果同時執行多個複雜查詢,您可能會耗盡 RAM。交換對性能非常不利。

如果您無法永久更改這些設置,請向提供商投訴。如果他們不聽,那麼更換供應商。這就是我認為設置有多糟糕。不更改“記憶體、CPU、磁碟:ssd”可以解決query_cache_size問題。

引用自:https://dba.stackexchange.com/questions/164188