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