苦主的主機自從在 SQL Server 跑 store procedure,透過 Linked Database 的方式把資料複製到 MySQL 以後,發現費用大為增加,開啟了 general query log 才發現在 insert into 之前還有詭異的行為:
312 Query SELECT @@transaction_isolation 312 Query set @@max_execution_time=600000 312 Query set @@sql_select_limit=DEFAULT 312 Query SELECT * FROM report.test 312 Init DB report 312 Query select database() 312 Query set @@max_execution_time=600000 312 Prepare insert into report.test (s) values ("123")
有發現嗎?在第 4 行有個 SELECT
,而且沒有任何 where 條件:會把整個 table 的資料全部拉回去。當好這張表就是放統計資料,所以流量就反應在帳單上了。
原本以為是 SQL Server 拉資料回去來分析 table schema,可惜不是。
針對 SQL Server 的 MSDASQL 和 MySQL ODBC Connecter 的設定做測試,發現 SQL Server 會自動使用 information_schema 來分析 table schema,若從 ODBC 把 filter 掉 information_schema 的後,SQL Server 會顯示出錯誤的資料。
目前大概只能把問題縮小到 SQL Server 上,但仍舊不明所以。若有遇到這類的問題只能盡量 workaround 掉了。