source

Oracle 연결 압축?

manysource 2023. 11. 6. 21:54

Oracle 연결 압축?

JDBC를 이용해 오라클 11g에 연결하는 애플리케이션이 있습니다.유감스럽게도 제 앱이 실행 중인 기계와 오라클 기계가 다소 낮은 대역폭 연결을 통해 연결되어 있습니다.연결을 스니핑하지는 않았지만, 연결을 통해 스트리밍되는 데이터가 압축되지 않은 것은 확실합니다.애플리케이션의 경우 지연 시간보다 대역폭이 더 중요합니다.

JDBC 드라이버와 Oracle에게 연결을 통해 전송되는 데이터를 압축하도록 지시할 방법이 있습니까?구글은 데이터 파일 압축에 대해 많은 답을 내놓지만, 저는 네트워크 프로토콜 압축에 대해 아무것도 찾을 수 없었습니다.

Oracle의 Thin 드라이버를 사용하고 있지만 OCI 드라이버에서만 지원되는 경우에는 OCI 드라이버로 전환할 수 있습니다.어떤 제안이든 감사합니다!

오라클의 씬 드라이버와 OCI 드라이버에 대해서는 자세히 모릅니다.그러나 SSH 터널을 사용하여 압축을 수행할 수도 있습니다.

  1. 따라서 Oracle 시스템에서 SSH 데몬을 설정합니다.Oracle 서버가 RedHat Linux에서 실행 중인 경우 완료됩니다.
  2. 클라이언트 시스템(JDBC를 통해 연결하는 애플리케이션을 호스팅하는 시스템)에서 압축 터널을 사용하도록 SSH 연결을 설정합니다.명령행 SSH 또는 Putty(창 아래에 있는 경우)를 사용하여 이를 수행할 수 있습니다.

다음과 같이 연결을 설정합니다.

$ ssh -L1521:localhost:1521 username@oracleserver_ip

그런 다음 애플리케이션에서 localhost:1521을 Oracle 주소로 사용합니다.

질문에 직접 답하기 위해 드라이버(씬 또는 OCI)에는 압축 메커니즘이 없습니다.전송된 데이터가 펑키 바이너리 형식일 가능성이 높기 때문에 SSL을 통해 잘 압축될 수 있을지 확신할 수 없습니다. 네트워크 성능을 향상시키기 위한 다른 메커니즘을 사용해야 할 것입니다.

제 경험으로는, 높은 지연 시간은 낮은 대역폭보다 훨씬 더 많은 Oracle JDBC 드라이버를 사용하는 성능에 해를 끼칩니다. (적어도 제가 작업하는 애플리케이션에서는)대기 시간에 대해 걱정하지 않는다고 하셨는데, 저대역폭 환경의 대기 시간에 대해 견적을 내주시겠습니까?

보내주시는 데이터의 크기가 얼마나 됩니까?BLOB 열이 있습니까?연결 풀 또는 최대 절전 모드와 같은 다른 기술이 관련되어 있습니까?데이터가 압축되는 것뿐만 아니라 여러 가지 잠재적 요인이 있습니다.

성능을 가장 저하시키는 요소를 분리하기 위해 WAN 에뮬레이션을 해본 적이 있습니까?WANem은 설정이 아주 쉽습니다.

저는 이 문제에 대해 몇 주 동안 연구해 왔는데, 100-200ms 지연으로 인해 1Mbit 대역폭 제한보다 훨씬 더 많은 피해를 입게 되었습니다.여러분이 다른 보트를 타고 있기를 바랍니다. 압축은 해결하기 쉬운 문제입니다.

업데이트일 뿐입니다.

12.2의 Oracle JDBC 연결에는 이제 다음 게시물에 명시된 압축 기능이 있습니다. http://www.oracle.com/technetwork/topics/jdbc-faq-090281.html#0000_00

네트워크 압축을 활성화하려면 Oracle JDBC Developer's Guide를 참조하십시오.이 기능은 Oracle 12c Release 2 기능입니다.

질문과 답변이 최신이 아니거나 링크가 끊어졌으므로 연결 압축을 사용할 수 있는 방법을 추가합니다.

데이터베이스 서버측:

DBA에게 문의하여 $DB_HOME\NETWORK\ADM 파일 구성IN\sqlnet.ora

아래 줄 추가:

SQLNET.COMPRESSION=on
SQLNET.COMPRESSION_THRESHOLD=1024
SQLNET.COMPRESSION_LEVELS=(high)

기본값:SQLNET.COMPRESSION_LEVELS서버에서(low). OCI 드라이버를 사용하는 경우에는 잘 작동할 수 있지만, 일반적으로 권장되는 씬 드라이버를 사용하는 경우에는 다음과 같이 특별히 구성해야 합니다.(high).

클라이언트측 Java 코드:

DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
OracleDataSource ds = new OracleDataSource();

Properties prop = new Properties();
prop.setProperty("user", "myuser");
prop.setProperty("password", "mypassword");
prop.setProperty("oracle.net.networkCompression", "on"); 
prop.setProperty("oracle.net.networkCompressionThreshold", "1024");

ds.setConnectionProperties(prop);
ds.setURL("jdbc:oracle:thin:@<HOSTNAME>:<PORT>/<SERVICENAME>");

Connection conn = ds.getConnection();

압축을 높게 설정하면 클라이언트와 특히 데이터베이스 서버 모두에서 CPU 사용량이 증가할 수 있습니다.네트워크 지연 시간이 실제로 문제가 되지 않는 한, 이는 선택해야 할 사항입니다.

이 JDBC 연결 문자열 구문은 허용 가능하며 다음과 같이 작동하는 것으로 보입니다.

jdbc:oracle:thin:@(description=(COMPRESSION=on)(COMPRESSION_LEVELS=(LEVEL=high))(address=(host=host1)(protocol=tcp)(port=1521)) (connect_data=(SERVICE_NAME=SERV1)(SERVER = DEDICATED)))

언급URL : https://stackoverflow.com/questions/1954279/oracle-connection-compression