Oracle 연결 압축?
JDBC를 이용해 오라클 11g에 연결하는 애플리케이션이 있습니다.유감스럽게도 제 앱이 실행 중인 기계와 오라클 기계가 다소 낮은 대역폭 연결을 통해 연결되어 있습니다.연결을 스니핑하지는 않았지만, 연결을 통해 스트리밍되는 데이터가 압축되지 않은 것은 확실합니다.애플리케이션의 경우 지연 시간보다 대역폭이 더 중요합니다.
JDBC 드라이버와 Oracle에게 연결을 통해 전송되는 데이터를 압축하도록 지시할 방법이 있습니까?구글은 데이터 파일 압축에 대해 많은 답을 내놓지만, 저는 네트워크 프로토콜 압축에 대해 아무것도 찾을 수 없었습니다.
Oracle의 Thin 드라이버를 사용하고 있지만 OCI 드라이버에서만 지원되는 경우에는 OCI 드라이버로 전환할 수 있습니다.어떤 제안이든 감사합니다!
오라클의 씬 드라이버와 OCI 드라이버에 대해서는 자세히 모릅니다.그러나 SSH 터널을 사용하여 압축을 수행할 수도 있습니다.
- 따라서 Oracle 시스템에서 SSH 데몬을 설정합니다.Oracle 서버가 RedHat Linux에서 실행 중인 경우 완료됩니다.
- 클라이언트 시스템(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
'source' 카테고리의 다른 글
열에 대한 최소 길이 제약 조건 (0) | 2023.11.06 |
---|---|
angular.js - 유럽 표기법의 10진수 (0) | 2023.11.06 |
문자열에 PowerShell의 배열에 부분 문자열이 포함되어 있는지 확인합니다. (0) | 2023.11.06 |
html 페이지의 div에 외부 웹페이지를 로드하는 방법 (0) | 2023.11.06 |
ORA-32795: 생성된 always identity 열에 삽입할 수 없습니다. (0) | 2023.11.01 |