iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 16
0
自我挑戰組

MariaDB 的使用與管理系列 第 16

Linked Server 與 FederatedX Storage Engine [2]

(以下文章擷取自筆者的 blog,分享給大家)

這篇筆者會說明在使用 FederatedX Storage Engine 碰到的問題,除了這個以外,筆者想要說的是,MariaDB 的社群實力十分堅強,這個問題的解決方法也是社群大神幫忙的,不會有孤立無援的感覺。

在筆者上線實做這個方式的時候,碰到一個問題,不管怎麼調整都會失敗。

  1. 透過排程每日執行匯入資料到遠端資料庫
  2. 網路很通暢 (之前 MSSQL 的 Linked Server 的路)
  3. 資料庫 loading 很低 (挑選沒有人使用資料庫的作業時間)
  4. 減少 access Federated Table 的次數 (原來 insert into federated_table select * from local_table ...; -> insert into local_staged_table select * from local_table ...; insert into federated_table select * from local_staged_table;)

錯誤的訊息 Got error 10000 'Error on remote system: 2006: MySQL server has gone away' from FEDERATED

因為錯誤太多了,把方法修改成是備份還原的方法 mysqldump ... DB.table | mysql ... DB ...,透過 sys_exec 執行(這個後面幾天會說明到),不再使用 FederatedX Storage Engine。

筆者也在社群發一個 issue,發現到之前也有一個類似的 issue (其實那篇裡頭就有解答,但筆者看不是很懂為什麼要那樣做)。

這個回答之前舊的問題的神人幫忙,終於解開疑惑了,他的解釋十分清楚,也不厭其煩的解釋每個動作。

原因在於遠端連線的問題。

基本上一個 Federated Table 的存取大概是這樣

動作 到遠端連線狀態 結果
Create Server N/A OK
Create Table 會測試連線是否正常,測試完即結束連線 OK
1st DMLs for Federate Table 第一個動作會建起到遠端連線的 session,並做相關紀錄 OK
Other DMLs for Federate Table 順利透過剛剛建立的 session 繼續作業 OK
遠端的 session 的 idle 時間大於 session wait_timeout 導致被 Kill 掉 遠端重開機或是一些緣故導致之前建立的 session 斷掉 N/A N/A
斷掉後的第一個 DMLs for Federate Table N/A 必定失敗(因為原來紀錄的 session 不見了)
重做 DMLs for Federate Table 或是下一個 建起到遠端連線的 session,並做相關紀錄 OK

如果在預設的狀態下 (wait_timeout 時間為 28800 秒,等於 8 小時),兩次作業時間為 24 小時,自然會被 Kill 掉,下次作業就會發生錯誤。

神人提到的解法是修改 wait_timeout 的時間,但筆者覺得那個系統參數可能會因為效能的問題而改變,這樣在管理上有些麻煩,所以改採開另一個排程,每小時作一次 Query 來讓 timeout 時間重算,這樣就不會發生觸發 wait_timeout 導致排程發生失敗的問題了。


上一篇
Linked Server 與 FederatedX Storage Engine [1]
下一篇
User-defined Functions 與擴增 Event 功能
系列文
MariaDB 的使用與管理30

尚未有邦友留言

立即登入留言