mysql性能調整,寫入,將db放入ram
我正在嘗試通過優化 Mysql 伺服器來提高網站的性能。除了一般優化之外,我感覺某些寫入操作需要的時間長得令人無法接受。
該伺服器是 Mac os x 伺服器 10.5.8(我認為這是一個 32 位作業系統),具有 2x2.8 GHz 四核英特爾至強和 8 GB 記憶體。
有 2 個很少使用的 InnoDB 表,另外 45 個表是 MyISAM。
整個數據庫為 1.2 GB,其中包括一個 400 MB 的日誌表,該表僅由應用程序寫入而從不讀取。
我認為將整個數據庫放在 RAM 中會提高性能。另外我會假設在系統故障的情況下容忍一些數據失去可以提高寫入性能,但我不知道如何配置它來利用這一點。可能失去的數據並不重要,如果失去,使用者可以重新創建。
該站點大約有 1 或 2 個同時訪問者。
我已經執行了 mysqltuner.pl 的一些迭代。以下是目前的結果:
>> MySQLTuner 1.2.0 - Major Hayden <major@mhtx.net> -------- General Statistics -------------------------------------------------- [--] Skipped version check for MySQLTuner script [OK] Currently running supported MySQL version 5.0.92-log [!!] Switch to 64-bit OS - MySQL cannot currently use all of your RAM -------- Storage Engine Statistics ------------------------------------------- [--] Status: -Archive -BDB -Federated +InnoDB -ISAM -NDBCluster [!!] InnoDB is enabled but isn't being used [OK] Total fragmented tables: 0 -------- Security Recommendations ------------------------------------------- ERROR 1142 (42000) at line 1: SELECT command denied to user ''@'localhost' for table 'user' [OK] All database users have passwords assigned -------- Performance Metrics ------------------------------------------------- [--] Up for: 16m 57s (4K q [4.126 qps], 122 conn, TX: 6M, RX: 1M) [--] Reads / Writes: 97% / 3% [--] Total buffers: 922.0M global + 12.4M per thread (100 max threads) [!!] Allocating > 2GB RAM on 32-bit systems can cause system instability [!!] Maximum possible memory usage: 2.1G (26% of installed RAM) [OK] Slow queries: 0% (0/4K) [OK] Highest usage of available connections: 2% (2/100) [!!] Cannot calculate MyISAM index size - re-run script as root user [OK] Query cache efficiency: 42.5% (1K cached / 3K selects) [OK] Query cache prunes per day: 0 [OK] Sorts requiring temporary tables: 0% (0 temp sorts / 36 sorts) [OK] Temporary tables created on disk: 8% (6 on disk / 68 total) [OK] Thread cache hit rate: 98% (2 created / 122 connections) [OK] Table cache hit rate: 53% (58 open / 109 opened) [OK] Open file limit used: 4% (103/2K) [OK] Table locks acquired immediately: 100% (3K immediate / 3K locks) -------- Recommendations ----------------------------------------------------- General recommendations: Add skip-innodb to MySQL configuration to disable InnoDB MySQL started within last 24 hours - recommendations may be inaccurate
這是我的 my.cnf
# The MySQL server [mysqld] port = 3306 socket = /var/mysql/mysql.sock skip-locking key_buffer = 384M max_allowed_packet = 1M table_cache = 1024 sort_buffer_size = 2M read_buffer_size = 2M read_rnd_buffer_size = 8M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size = 512M # Try number of CPU's*2 for thread_concurrency thread_concurrency = 8 skip-thread-priority log_slow_queries = 1 long_query_time = 1
在重新啟動 mysql 之前,我有 3 個慢查詢,大概 100K 查詢,但是我在哪裡可以找到這些查詢的日誌?
//
您說您“感覺某些寫入操作花費的時間長得令人無法接受”。是什麼讓你有這種感覺?你有沒有試過測量它?
如果你在 OS X 上,dtrace是測量這類事情的絕佳工具。有些人已經為你做了一些工作。至少,使用
vmstat
或iostat
來iotop
確定您是否看到磁碟計時顯著減慢。你
query_cache_size
的可能太大了。寫入必須使查詢記憶體中該表的所有條目無效。 查詢記憶體越大,所需的時間就越長,這可能會使您的寫入速度變慢。手冊推薦“幾十兆”。您應該逐步更改它並在每次更改後測量性能以確定您的大小。該
Table locks acquired immediately: 100% (3K immediate / 3K locks)
值表明 MyISAM 表鎖定對您來說不是問題。這可能會成為具有較高寫入與讀取比率的 MyISAM 表的一個重大問題。寫入磁碟的查詢包含在慢速查詢跟踪中,因此如果您看到對 INSERT、UPDATE、REPLACE、DELETE、TRUNCATE 等的慢速查詢,則表明您有問題。
慢查詢日誌可以是文件或表或兩者兼而有之。由於您似乎沒有為其指定位置,因此它應該使用預設值。 從慢查詢日誌的手冊部分和日誌位置的部分:
如果您未指定慢查詢日誌文件的名稱,則預設名稱為 host_name-slow.log。伺服器在數據目錄中創建文件,除非給出絕對路徑名來指定不同的目錄。