전통문화대전망 - 전통 미덕 - 데이터베이스 성능에 영향을 미치는 주요 요인은 무엇입니까?
데이터베이스 성능에 영향을 미치는 주요 요인은 무엇입니까?
1, 1, 데이터 구조 설계 조정. 이 부분은 정보 시스템을 개발하기 전에 완성되었다. 프로그래머는 ORACLE 데이터베이스의 분할 기능을 사용할지, 자주 액세스하는 데이터베이스 테이블을 인덱스화할지 여부를 고려해야 합니다. \x0d\\x0d\2, 2, 응용 프로그램 구조 설계 조정. 이 부분은 또한 정보 시스템 개발 전에 완성되었다. 프로그래머는 어플리케이션이 어떤 스키마를 사용하는지, 기존의 클라이언트/서버 2 계층 스키마를 사용할지, 브라우저 /Web/ 데이터베이스 3 계층 스키마를 사용할지 고려해야 합니다. 응용 프로그램 스키마마다 다른 데이터베이스 리소스가 필요합니다. \x0d\\x0d\3, 3, 데이터베이스 SQL 문 튜닝. 적용된 실행은 결국 데이터베이스에서 SQL 문의 실행으로 귀결되므로 SQL 문의 실행 효율성에 따라 ORACLE 데이터베이스의 성능이 결정됩니다. ORACLE 은 ORACLE 문 최적기와 행 레벨 관리자를 사용하여 SQL 문을 튜닝 및 튜닝할 것을 권장합니다. \ x0d \ \ x0d \ 4,4, 서버 메모리 할당 조정. 정보 시스템 운영 중 메모리 할당을 최적화하면 데이터베이스 관리자는 데이터베이스 운영에 따라 데이터베이스 SGA (시스템 전역 영역) 의 데이터 버퍼, 로그 버퍼 및 * * * 공유 풀 크기를 조정할 수 있습니다. PGA (프로그램 전역 영역) 크기를 조정할 수도 있습니다. SGA 면적이 클수록 좋다는 점에 유의해야 한다. SGA 면적이 너무 크면 운영 체제에서 사용하는 메모리가 사용되므로 가상 메모리의 페이지 교환이 발생하여 시스템이 낮아집니다. \x0d\\x0d\5, 5, 하드 디스크 I/O 조정, 이 단계는 정보 시스템 개발 전에 수행됩니다. 데이터베이스 관리자는 동일한 테이블스페이스를 구성하는 데이터 파일을 서로 다른 하드 드라이브에 배치하여 하드 디스크 간 I/O 로드 밸런싱을 수행할 수 있습니다. \ x0d \ \ x0d \ 6,6. UNIX 운영 체제에서 실행되는 ORACLE 데이터베이스와 같은 운영 체제 매개변수를 조정하여 UNIX 데이터 버퍼 풀의 크기와 프로세스당 사용 가능한 메모리의 양을 조정할 수 있습니다. \x0d\\x0d\ 실제로 위의 데이터베이스 최적화 조치는 상호 연관되어 있습니다. ORACLE 데이터베이스의 성능 저하는 기본적으로 사용자 응답 시간이 길어서 사용자가 오래 기다려야 합니다. 그러나 성능 저하의 원인은 다양하며, 때로는 여러 가지 요인 * * * 으로 인해 성능이 저하되는 경우가 있습니다. 이를 위해서는 데이터베이스 관리자가 데이터베이스 성능에 영향을 미치는 주요 원인에 민감하고 포괄적인 컴퓨터 지식을 갖추고 있어야 합니다. 또한 좋은 데이터베이스 관리 도구는 데이터베이스 성능을 최적화하는 데도 중요합니다. \x0d\\x0d\ORACLE 데이터베이스 성능 최적화 도구 \x0d\\x0d\ 일반 데이터베이스 성능 최적화 도구는 \ x0d \ x0d \ 1,/kloc 입니다 \x0d\\x0d\2, 2, UNIX 운영 체제의 vmstat 및 iostat 와 같은 운영 체제 툴은 시스템 레벨 메모리 및 하드 디스크 I/O 사용을 확인할 수 있으며, 이러한 도구는 관리자가 시스템 병목 현상이 발생하는 위치를 파악하는 데 유용할 수 있습니다. \ x0d \ \ x0d \ 3,3. SQL 문의 실행을 기록하는 SQL 추적 툴. 관리자는 가상 테이블을 사용하여 인스턴스를 튜닝하고 SQL 문 추적 파일을 사용하여 응용 프로그램 성능을 튜닝할 수 있습니다. SQL 언어 추적 도구는 관리자가 TKPROF 도구를 사용하여 볼 수 있는 운영 체제 파일로 결과를 출력합니다. \x0d\\x0d\4, 4, OEM (ORACLE enterprise manager) 은 복잡한 Oracle 데이터베이스 관리 명령을 기억하지 않고도 데이터베이스를 쉽게 관리할 수 있는 그래픽 사용자 관리 인터페이스입니다. \x0d\\x0d\5, 5, 계획 설명-프로그래머가 효율적인 SQL 언어를 작성하는 데 도움이 되는 SQL 언어 최적화 명령입니다. \x0d\\x0d\ Oracle 데이터베이스의 시스템 성능 평가 \ x0d \ \ x0d \ 정보 시스템 유형에 따라 다른 데이터베이스 매개 변수가 필요합니다. 데이터베이스 관리자는 자신의 정보 시스템 유형에 따라 다양한 데이터베이스 매개변수에 집중해야 합니다. \ x0d \ x0d \ 1, 1, 온라인 트랜잭션 처리 정보 시스템 (OLTP), 일반적으로 많은 삽입 및 업데이트 작업이 필요합니다. 일반적인 시스템에는 민간 항공 발권 시스템, 은행 저축 시스템 등이 있습니다. OLTP 시스템은 데이터베이스 최종 사용자의 동시성, 신뢰성 및 속도를 보장해야 합니다. 이러한 시스템에서 사용하는 ORACLE 데이터베이스는 주로 다음과 같은 매개변수를 고려합니다. \ x0d \ \ x0d \ l lIs 데이터베이스 롤백 세그먼트가 충분합니까? \ x0d \ \ x0d \ l ORACLE 데이터베이스를 인덱싱, 집계 및 해시해야 합니까? \ x0d \ \ x0d \ l SGA (시스템 전역 영역) 크기가 충분합니까? \ x0d \ \ x0d \ l SQL 문이 효율적입니까? \x0d\\x0d\2, 2, 데이터 웨어하우스 시스템, 이 정보 시스템의 주요 작업은 ORACLE 의 대량 데이터에서 쿼리하여 데이터 간의 몇 가지 규칙을 도출하는 것입니다. 이러한 유형의 ORACLE 데이터베이스의 경우 데이터베이스 관리자는 다음 매개 변수를 고려해야 합니다. \ x0d \ x0d \ l l 은 B*- 인덱스 또는 비트맵 인덱스를 사용합니까? \ x0d \ \ x0d \ l lIs 병렬 SQL 쿼리는 쿼리 효율성을 향상시키는 데 사용됩니까? \x0d\\x0d\l l PL/SQL 함수를 사용하여 저장 프로시저를 작성하시겠습니까? \ x0d \ x0d \ l 필요한 경우 데이터베이스의 쿼리 효율성을 높이기 위해 병렬 데이터베이스를 구축해야 합니다. \ x0d \ x0d \ SQL 문의 튜닝 지침 \ x0d \ x0d \ SQL 언어는 유연한 언어이며 동일한 기능을 다른 명령문을 통해 수행할 수 있습니다 프로그래머는 EXPLAIN PLAN 문을 사용하여 다양한 구현 시나리오를 비교하고 최상의 시나리오를 선택할 수 있습니다. 일반적으로 프로그래머가 SQL 문을 작성하려면 \ x0d \ x0d \ 1, 1, 가능한 한 인덱스를 사용해야 합니다. 다음 두 개의 SQL 문을 비교해 보십시오. \ x0d \ x0d \ 문 a: select dname, dept from dept where dept not in \ x0d \ \ x0d \ (select dept fin \x0d\\x0d\ 문 b: select dname, deptno from dept where not exists \ x0d \ \ x0d \ (select deptno from EMM \x0d\\x0d\ 두 쿼리 문의 결과는 동일하지만 문 a 를 실행하면 ORACLE 은 EMP 테이블에 작성된 deptno 인덱스 대신 전체 EMP 테이블을 스캔합니다. 명령문 b 를 실행할 때 하위 질의에 통합 질의가 사용되기 때문에 ORACLE 은 EMP 테이블의 일부 데이터만 스캔하고 deptno 열 인덱스를 사용하기 때문에 명령문 b 는 명령문 a 보다 효율이 약간 높습니다. \ x0d \ \ x0d \ 2,2. 통합 쿼리의 통합 순서를 선택합니다. 다음 예를 고려해 보십시오. \ x0d \ x0d \ select stuffrom tabaa, tabb, tabc \ x0d \ x0d \ 여기서 a.acol between: a high \ X0d \ and c.ccol between: chlow and: chigh \ x0d \ \ x0d \ and a.key1= b.key 이 SQL 예에서 프로그래머는 먼저 조회할 마스터 테이블을 선택해야 합니다. 마스터 테이블은 전체 테이블 데이터를 스캔하기 때문에 마스터 테이블에는 가장 작은 데이터가 있어야 합니다. 따라서 예에서 테이블 A 의 acol 열 범위는 테이블 B 와 테이블 C 의 해당 열 범위 \ X0D \ \ X0D \ 3,3 보다 작습니다. 하위 쿼리에 IN 또는 NOT IN 문을 신중하게 사용하고 where (NOT) exists 를 사용하는 것이 훨씬 좋습니다. \ x0d \ \ x0d \ 4,4. 뷰의 통합 쿼리, 특히 더 복잡한 뷰 간의 통합 쿼리를 신중하게 사용합니다. 일반적으로 뷰의 질의를 데이터 테이블의 직접 질의로 나누는 것이 좋습니다. \ x0d \ \ x0d \ 5,5. 매개변수 파일에서 SHARED_POOL_RESERVED_SIZE 매개변수를 설정할 수 있습니다. 이 매개변수는 SGA*** 공유 풀에 연속 메모리 공간을 보유하므로 대형 SQL 패키지를 저장하는 데 도움이 됩니다. \ x0d \ \ x0d \ 6,6. ORACLE 에서 제공하는 DBMS_SHARED_POOL 프로그램은 프로그래머가 메모리를 교체하지 않고 자주 사용하는 저장 프로시저를 SQL 영역에 "못 박는" 데 도움을 줍니다. 이를 통해 프로그래머는 일반적으로 사용되는 저장 프로시저를 메모리에 "고정" 하여 최종 사용자의 응답 시간을 향상시킬 수 있습니다. \x0d\\x0d\CPU 매개 변수 조정 \ x0d \ \ x0d \ CPU 는 서버의 중요한 리소스이며, 서버의 양호한 작동 상태는 사용량이 가장 많을 때 CPU 사용률이 90% 이상이라는 것입니다. 유휴 시간 CPU 사용률이 90% 이상이면 서버에 CPU 자원이 부족한 것입니다. 사용량이 가장 많은 시간대에도 CPU 사용률이 여전히 낮으면 서버 CPU 자원이 상대적으로 과잉인 것입니다. \x0d\\x0d\ 동일한 명령을 사용하여 CPU 사용량을 확인합니다. UNIX 운영 체제 서버의 경우 sar _u 명령을 사용하여 CPU 사용량을 볼 수 있고 NT 운영 체제 서버의 경우 NT 성능 관리자를 사용하여 CPU 사용량을 볼 수 있습니다. \x0d\\x0d\ 데이터베이스 관리자는 v$sysstat 데이터 사전에서' 이 세션에 사용된 CPU' 통계를 보고 ORACLE 데이터베이스에서 사용하는 CPU 시간을 알 수 있으며' OS 사용자 레벨 CPU 시간' 통계를 보면 운영 체제 사용자 모드의 CPU 시간을 알 수 있습니다. "OS 시스템 호출 CPU 시간" 통계를 보면 운영 체제의 시스템 모드에서 CPU 시간을 알 수 있습니다. 운영 체제의 총 CPU 시간은 사용자 모드와 시스템 모드 시간의 합계입니다. ORACLE 데이터베이스에서 사용하는 CPU 시간이 운영 체제 총 CPU 시간의 90% 이상을 차지하는 경우 서버 CPU 가 기본적으로 ORACLE 데이터베이스에서 사용되는 것이 합리적입니다. 반대로 서버 CPU 가 다른 프로그램에 의해 사용되고 ORACLE 데이터베이스에서 더 많은 CPU 시간을 얻을 수 없음을 의미합니다. \x0d\\x0d\ 데이터베이스 관리자는 v$sesstat 데이터 사전을 보고 현재 ORACLE 데이터베이스에 접속된 각 세션에 소요된 CPU 시간을 확인할 수 있어 서버 CPU 를 더 많이 소비하는 세션을 알 수 있습니다. \ x0d \ \ x0d \ 리소스가 부족한 경우가 많습니다. SQL 문의 재분석, 비효율적인 SQL 문, 잠금 충돌로 인해 CPU 리소스가 부족할 수 있습니다. \x0d\\x0d\ 1. 데이터베이스 관리자는 다음 명령문을 실행하여 SQL 문의 구문 분석을 확인할 수 있습니다. \ x0d \ \ x0d \ select * from v $ sysstat \ x0d \ x0d \ wherenamein \ x0d \ \ \ \x0d\\x0d\ 여기서 parse time CPU 는 시스템 서비스 시간, parse time elapsed 는 응답 시간, 사용자 대기 시간 \ x0d \ x0d \ waitetime = parsetimeelapsed 입니다 이 평균 대기 시간은 0 에 가까워야 한다. 평균 분석 대기 시간이 너무 길면 데이터베이스 관리자는 다음 명령문을 사용할 수 있습니다. \ x0d \ \ x0d \ select SQL _ text, parse _ calls, executions from v $ sqlarea \ x00 \x0d\\x0d\ 비효율적인 SQL 문을 찾습니다. 프로그래머는 이러한 명령문을 최적화하거나 ORACLE 매개변수 SESSION_CACHED_CURSORS 의 값을 늘릴 수 있습니다. \x0d\\x0d\2. 데이터베이스 관리자도 다음 명령문을 사용할 수 있습니다. \ x0d \ \ x0d \ select buffer _ gets, executions, SQL _ textfrom v $ sqlarea \ x0d \ \ \ x0d \ \ x0d \ 3,3. 데이터베이스 관리자는 v$system_event 데이터 사전의' 래치 없음' 통계를 통해 ORACLE 데이터베이스의 충돌을 확인할 수 있습니다. 충돌이 없으면 latch free 에서 결과를 찾을 수 없습니다. 충돌이 너무 큰 경우 데이터베이스 관리자는 spin_count 매개변수 값을 줄여 높은 CPU 사용률을 제거할 수 있습니다. \x0d\\x0d\ 메모리 매개변수 조정 \x0d\\x0d\ 메모리 매개변수 조정은 주로 ORACLE 데이터베이스의 SGA (시스템 전역 영역) 조정을 나타냅니다. SGA 는 주로 * * 공유 풀, 데이터 버퍼 및 로그 버퍼의 세 부분으로 구성됩니다. \x0d\\x0d\ 1, 1, * * 공유 풀은 * * 공유 SQL 영역과 데이터 딕셔너리 버퍼, * * 공유 SQL 영역은 사용자 SQL 명령이 저장되는 영역입니다 데이터베이스 관리자는 다음 명령문을 실행합니다. \ x0d \ x0d \ select (sum (pins-reloads))/sum (pins) "libcache" from v $ librads \x0d\\x0d\ 검사 * * * SQL 영역 활용도. 이 사용률은 90% 이상이어야 합니다. 그렇지 않으면 * * * 공유 풀 크기를 늘려야 합니다. 데이터베이스 관리자는 다음 명령문을 실행할 수도 있습니다. \ x0d \ x0d \ select (sum (gets-getmisses-usage-fixed))/sum (gets) "row co \x0d\\x0d\ 데이터 딕셔너리 버퍼 사용률도 90% 이상이어야 합니다. 그렇지 않으면 * * * 공유 풀 크기를 늘려야 합니다. \ x0d \ \ x0d \ 2,2, 데이터 버퍼. 데이터베이스 관리자는 \ x0d \ x0d \ select name, value from v $ sysstat where name in ('db block gets',' consistent gets') 문을 사용할 수 있습니다 \x0d\\x0d\ 데이터베이스 데이터 버퍼 사용 확인. 쿼리 결과는 데이터 버퍼의 적중률 = 1- (물리적 읽기 /(db 블록 가져오기+일관성 획득)) 을 계산하는 데 사용할 수 있습니다. \x0d\\x0d\ 이 적중률은 90% 이상이어야 합니다. 그렇지 않으면 데이터 버퍼 크기를 늘려야 합니다. \ x0d \ \ x0d \ 3,3, 로그 버퍼. 데이터베이스 관리자는 다음 명령문을 실행할 수 있습니다. \ x0d \ x0d \ select name, value from v $ sysstat where name in ('리두 항목',' 리두 로그 공간 요청'); 로그 버퍼 사용량을 확인합니다. 질의 결과를 사용하여 로그 버퍼의 적용 실패율을 계산할 수 있습니다. \ x0d \ x0d \ 적용 실패율 = = 요청/entries, 적용 실패율은 0 에 가까워야 합니다. 그렇지 않으면 로그 버퍼가 너무 작아 ORACLE 데이터베이스의 로그 버퍼를 늘려야 합니다.