目前,GaussDB相關的第三方工具都是通過JDBC進行連接的,此部分將介紹工具配置時的注意事項。
連接參數(shù)
【關注】第三方工具通過JDBC連接GaussDB時,JDBC向GaussDB發(fā)起連接請求,會默認添加以下配置參數(shù),詳見JDBC代碼ConnectionFactoryImpl類的實現(xiàn)。
params = {
{ "user", user },
{ "database", database },
{ "client_encoding", "UTF8" },
{ "DateStyle", "ISO" },
{ "extra_float_digits", "3" },
{ "TimeZone", createPostgresTimeZone() },
};
這些參數(shù)可能會導致JDBC客戶端的行為與gsql客戶端的行為不一致,例如,Date數(shù)據(jù)顯示方式、浮點數(shù)精度表示、timezone顯示。
如果實際期望和這些配置不符,建議在java連接設置代碼中顯式設定這些參數(shù)。
【建議】通過JDBC連接數(shù)據(jù)庫時,應該保證下面三個時區(qū)設置一致:
JDBC客戶端所在主機的時區(qū)。
GaussDB集群所在主機的時區(qū)。
GaussDB集群配置過程中時區(qū)。
fetchsize
【關注】在應用程序中,如果需要使用fetchsize,必須關閉autocommit。開啟autocommit,會令fetchsize配置失效。
autocommit
【建議】在JDBC向GaussDB申請連接的代碼中,建議顯式打開autocommit開關。如果基于性能或者其它方面考慮,需要關閉autocommit時,需要應用程序自己來保證事務的提交。例如,在指定的業(yè)務SQL執(zhí)行完之后做顯式提交,特別是客戶端退出之前務必保證所有的事務已經(jīng)提交。
釋放連接
【建議】推薦使用連接池限制應用程序的連接數(shù)。每執(zhí)行一條SQL就連接一次數(shù)據(jù)庫,是一種不好SQL的編寫習慣。
【建議】在應用程序完成作業(yè)任務之后,應當及時斷開和GaussDB的連接,釋放資源。建議在任務中設置session超時時間參數(shù)。
【建議】使用JDBC連接池,在將連接釋放給連接池前,需要執(zhí)行以下操作,重置會話環(huán)境。否則,可能會因為歷史會話信息導致的對象沖突。
如果在連接中設置了GUC參數(shù),那么在將連接歸還連接池之前,必須使用“SET SESSION AUTHORIZATION DEFAULT;RESET ALL;”將連接的狀態(tài)清空。
如果使用了臨時表,那么在將連接歸還連接池之前,必須將臨時表刪除。
CopyManager
【建議】在不使用ETL工具,數(shù)據(jù)入庫實時性要求又比較高的情況下,建議在開發(fā)應用程序時,使用GaussDB JDBC驅(qū)動的copyManger接口 進行微批導入。