苦主的主機自從在 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 掉了。