2016-07-25 65 views
0

我爲生物化學研究人員創建了一個網站,允許用戶查詢特定基因並計算不同基因集之間的各種統計數據。MYSQL內存優化中的只讀數據庫

MySQL數據庫是16GB和只讀(我們的實驗室生成這個新穎的數據,網站是一個門戶網站,查看此數據)。我的性能測試了網站,並意識到數據庫查詢是應用程序的最慢部分。我想把整個數據庫放到內存中,但遇到了一些普遍接受的解決方案:

我有一個8核32GB服務器供使用。

選項1:設置ENGINE = MEMORY

數列是mediumtext類型的並超過64K行限制,並拒絕被放入MEMORY ENGINE

選項2:增加innodb_buffer_pool_size

這似乎並沒有將數據存入內存。我使用描述的技術(https://dba.stackexchange.com/questions/27328/how-large-should-be-mysql-innodb-buffer-pool-size)檢查了使用的緩衝池,但僅查看了〜100Mbs的已用緩衝池。 innodb_buffer_pool_size正確設置爲24GB。

選項3:創建RAMdisk並將數據庫放在那裏 這似乎不是基於幾個SO帖子的好選擇。

我應該如何繼續?請指教。

+0

如果每個查詢是OK的樣品?使用所有查詢最佳索引?你能告訴更多關於表格的信息嗎? –

+0

緩衝區只有在使用db的時候纔會被填滿。在不同的負載下,你是否真的讓它運行​​了一段時間? –

+0

如果您不使用與您一起工作的數據,緩衝池不會被填充。一旦你使用它,MySQL從磁盤讀取它並將其添加到緩衝池(RAM)中,所以下一次處理它時 - 它就在那裏。有一種技巧可以用來通過創建一個臨時黑洞表來預加載緩衝池並加載數據:'CREATE TEMPORARY TABLE preload ENGINE = BLACKHOLE SELECT * FROM table_to_preload_into_buffer_pool'。我不知道是否有任何類型的配置選項可以讓您在啓動時預加載,但這應該可以幫助您預加載緩衝池。 –

回答

1

您是否檢查EXPLAIN和分析?

建檔

在這裏你可以看到你的服務器所花費的時間和優化這個

MariaDB [yourschema]> set profiling=on; 
Query OK, 0 rows affected (0.00 sec) 

MariaDB [yourschema]> select * from table2 t1 left join table2 t2 ON t1.id <> t2.id;; 
+--------+------------+--------+------------+ 
| id  | val  | id  | val  | 
+--------+------------+--------+------------+ 
| 000002 | tabe 2 --2 | 000001 | tabe 2 --1 | 
.... 
| 000005 | tabe 2 --5 | 000004 | tabe 2 --4 | 
| 000006 | tabe 2 --6 | 000004 | tabe 2 --4 | 
| 000001 | tabe 2 --1 | 000005 | tabe 2 --5 | 
| 000002 | tabe 2 --2 | 000005 | tabe 2 --5 | 
| 000004 | tabe 2 --4 | 000005 | tabe 2 --5 | 
| 000006 | tabe 2 --6 | 000005 | tabe 2 --5 | 
| 000001 | tabe 2 --1 | 000006 | tabe 2 --6 | 
| 000002 | tabe 2 --2 | 000006 | tabe 2 --6 | 
| 000004 | tabe 2 --4 | 000006 | tabe 2 --6 | 
| 000005 | tabe 2 --5 | 000006 | tabe 2 --6 | 
+--------+------------+--------+------------+ 
20 rows in set (0.00 sec) 


MariaDB [yourschema]> show profile all; 
+----------------------+----------+----------+------------+-------------------+---------------------+--------------+---------------+---------------+-------------------+-------------------+-------------------+-------+-----------------------+---------------+-------------+ 
| Status    | Duration | CPU_user | CPU_system | Context_voluntary | Context_involuntary | Block_ops_in | Block_ops_out | Messages_sent | Messages_received | Page_faults_major | Page_faults_minor | Swaps | Source_function  | Source_file | Source_line | 
+----------------------+----------+----------+------------+-------------------+---------------------+--------------+---------------+---------------+-------------------+-------------------+-------------------+-------+-----------------------+---------------+-------------+ 
| starting    | 0.000113 | 0.000072 | 0.000041 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     2 |  0 | NULL     | NULL   |  NULL | 
| checking permissions | 0.000006 | 0.000003 | 0.000003 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     0 |  0 | check_access   | sql_parse.cc |  6051 | 
| checking permissions | 0.000005 | 0.000004 | 0.000001 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     0 |  0 | check_access   | sql_parse.cc |  6051 | 
| Opening tables  | 0.000307 | 0.000071 | 0.000236 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     9 |  0 | open_tables   | sql_base.cc |  4509 | 
| After opening tables | 0.000010 | 0.000006 | 0.000003 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     0 |  0 | open_tables   | sql_base.cc |  4747 | 
| System lock   | 0.000005 | 0.000004 | 0.000002 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     0 |  0 | mysql_lock_tables  | lock.cc  |   308 | 
| Table lock   | 0.000010 | 0.000009 | 0.000001 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     0 |  0 | mysql_lock_tables  | lock.cc  |   313 | 
| init     | 0.000027 | 0.000025 | 0.000002 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     0 |  0 | mysql_select   | sql_select.cc |  3427 | 
| optimizing   | 0.000014 | 0.000012 | 0.000001 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     0 |  0 | optimize_inner  | sql_select.cc |  1092 | 
| statistics   | 0.000022 | 0.000021 | 0.000002 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     0 |  0 | optimize_inner  | sql_select.cc |  1373 | 
| preparing   | 0.000117 | 0.000037 | 0.000084 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     4 |  0 | optimize_inner  | sql_select.cc |  1398 | 
| executing   | 0.000010 | 0.000004 | 0.000003 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     0 |  0 | exec_inner   | sql_select.cc |  2551 | 
| Sending data   | 0.000106 | 0.000102 | 0.000003 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     0 |  0 | exec_inner   | sql_select.cc |  3223 | 
| end     | 0.000007 | 0.000004 | 0.000003 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     0 |  0 | mysql_select   | sql_select.cc |  3462 | 
| query end   | 0.000008 | 0.000006 | 0.000001 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     0 |  0 | mysql_execute_command | sql_parse.cc |  5687 | 
| closing tables  | 0.000004 | 0.000003 | 0.000002 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     0 |  0 | close_thread_tables | sql_base.cc |   935 | 
| Unlocking tables  | 0.000008 | 0.000007 | 0.000001 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     0 |  0 | mysql_unlock_tables | lock.cc  |   395 | 
| freeing items  | 0.000008 | 0.000006 | 0.000002 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     0 |  0 | mysql_parse   | sql_parse.cc |  7319 | 
| updating status  | 0.000023 | 0.000008 | 0.000015 |     0 |     0 |   0 |    0 |    1 |     0 |     0 |     0 |  0 | dispatch_command  | sql_parse.cc |  1937 | 
| cleaning up   | 0.000004 | 0.000002 | 0.000002 |     0 |     0 |   0 |    0 |    0 |     0 |     0 |     0 |  0 | dispatch_command  | sql_parse.cc |  1956 | 
+----------------------+----------+----------+------------+-------------------+---------------------+--------------+---------------+---------------+-------------------+-------------------+-------------------+-------+-----------------------+---------------+-------------+ 
20 rows in set (0.00 sec) 

MariaDB [yourschema]>