SQL SERVER – 성능 저하의 가장 큰 이유(한글번역기)

SQL 서버의 성능 저하 – 아키텍처 불량

이는 성능이 떨어지는 SQL Server의 가장 큰 이유인 것으로 보입니다. 그러나 건축의 주제는 매우 광범위하며 건축비효율성의 모든 지점을 논의하는 것은 불가능합니다. 아키텍처의 주제는 인덱스에서 쿼리 다시 작성으로 확산되고 AlwaysOn은 읽기 전용 복제본으로 분산되어 이 항목 아래에 포함할 수 있는 무한한 것들이 있습니다. 그러나 대화 중에 강조된 몇 가지 주제가 있습니다.

SQL SERVER - Top Reasons for Slow Performance slowperformance-800x483

미래의 증거 스키마와 코드를 구축하는 것은 쉽지 않습니다. 사업을 시작할 때, 비즈니스의 요구 사항은 수년 동안 동일한 비즈니스를 운영할 때와 매우 다릅니다. 비즈니스의 성공은 또한 다른 지리의 확장과 모든 사용자 정의 코드와 임시 수정을 많이 이르게 데이터의 성장을 제공, 이는 영구적이된다. 다음은 SQL Server의 성능 저하로 이어지는 빠른 목록입니다.

이유 #1: 나쁜 스키마 디자인

많은 사람들이 요구 사항을 완전히 파악하지 않고 스키마를 구축하기 시작하고 매우 복잡한 쿼리와 끔찍한 서버 성능으로 이어지는 초기에 잘못된 디자인으로 이어질 놀라운 찾을 수 있습니다.

일반적인 실수는 다음과 같습니다.

  • 정규화 불량 – 평면 와이드 테이블 또는 정규화 이상
  • 데이터베이스의 중복 데이터
  • 잘못된 참조 무결성(외래 키 및 제약 조건)
  • 넓은 복합 기본 키(및 클러스터된 인덱스)
  • 스키마 견고성 으로 인한 스트레스 테스트가 성장 패턴을 고수하지 않습니다.

더 나쁜 스키마 디자인 관행이 많이 있지만, 비즈니스가 성공한 후에야 여러 번 우연히 발견하고 잠시 후에 스키마를 변경하기가 어렵습니다. 새 프로젝트를 시작하는 경우 항상 처음부터 적절한 스키마를 설계하고 상태 확인의필요한 모든 단계를 따르는 것이 좋습니다.

이유 #2: 비효율적인 T-SQL 쿼리 / 코드

코딩이 좋지 않은 데는 여러 가지 이유가 있으며 코드를 작성하는 개발자가 스키마 또는 새 T-SQL 기능에 익숙하지 않기 때문입니다. 나는 커서를 사용하고 루프가 단순히 INSERT를 사용하여 데이터를 삽입 할 수있는 데이터를 삽입하는 동안 많은 사용자를 보았다 … 선택하거나 선택합니다… 테이블에 넣습니다.

일반적인 실수는 다음과 같습니다.

  • 존재하지 않거나 존재하지 않는 대신 에 또는 IN을 사용하지 않음
  • INSERT 대신 커서 또는 흰색 루프사용… 선택하거나 선택합니다… 테이블 속으로
  • 필요한 열 이름 대신 SELECT* 사용
  • 논리적 또는 AND 연산자 사용 시 괄호 사용 중지
  • 복잡한 실행 계획을 만드는 하위 쿼리 중첩
  • WHERE 절의 인덱싱된 열에서 함수 사용
  • 스칼라 사용자 정의 함수의 남용
  • 조건자(조건 또는 조인)의 데이터 형식 불일치
  • 유니온 대 유니온 올의 상호 교환 사용
  • 어디서나 구별을 사용하는 불필요한
  • 동적 SQL
  • … 이 시리즈는 한 달 동안 시리즈가 될 수 있습니다.

포괄적인 데이터베이스 성능 상태 확인중에 이 문제를 자세히 설명하는 동안 언제든지 이 주제에 대해 설명하는 무료 비디오를 볼 수 있습니다.

이유 #3: 잘못된 인덱싱 전략

감옥 카드에서 벗어나기 위한 해결책으로 인덱싱을 사용하는 사람들을 보는 것은 매우 일반적이며 종종 카드를 사용하기 위해 다시 감옥에 갇히는 경우가 많습니다. 색인은 종종 성능 문제를 해결하기 위해 실버 총알로 간주되지만 솔직히 이야기는 매우 다릅니다. 인덱싱을 잘못 사용하는 경우 절대적으로 귀하에 대해 작동할 수 있습니다. 색인과 함께 많은 공포 이야기가 있습니다. 나는이 주제에 대해 많은 블로그를 했기 때문에 토론을 매우 짧게 유지할 것입니다.

일반적인 실수는 다음과 같습니다.

  • 모든 단일 외국 키 인덱싱
  • 테이블의 모든 열 인덱싱
  • 많은 단일 열 인덱스
  • 클러스터된 인덱스 위에 힙 테이블 선호
  • 테이블 의 과소 평가
  • 인덱스를 유지 관리하지 않음

다음은 인덱스 전략의 균형을 맞추는 데 도움이 되는 인덱싱을 위한 가장 인기 있는 두 스크립트입니다.

또한, 인덱스가 SELECT 문의 성능을 저하시킬 수 있는 방법을 보여 주는 무료 비디오를 여기에서 시청하는 것이 좋습니다.

다음은 후속 블로그 게시물입니다: 잘못된 색인 전략 – 10 인덱스에 대 한 하지 마십시오.

이유 #4: 잘못된 서버 배포

이것은 내가 가장 좋아하는 주제이며 사실, 나는 몇 시간 동안 그것에 대해 계속 이야기 할 수 있습니다. 교육 세션에 참석한 경우 잘못된 서버 배포 관행 목록을 알고 있어야 합니다. 가장 큰 불만, 사람들이 그들의 SQL Server를 업그레이드 할 때 듣고 새로운 소프트웨어와 하드웨어에도 불구 하 고 그들은 성능 저하. SQL Server의 성능 저하와 관련된 다양한 매개 변수가 있으며 가장 큰 매개 변수는 적절한 배포입니다.

일반적인 실수는 다음과 같습니다.

  • 최대 병렬 도0유지
  • 인덱스 레벨을 채우기 팩터로 설정하지 않음
  • 낮은 필그라스
  • 단일 TempDB 파일
  • SQL Server 데이터 및 로그 파일을 함께 호스팅
  • SQL Server 파일에서 바이러스 백신 실행
  • 최대 메모리 구성의 잘못된 값
  • 로그 파일에 대한 높은 대기 시간
  • … 그리고 더 많은 나는 종종 건강 검사 중에 논의.

#5 이유: 프로비저닝 하드웨어

나는 이것이 업계의 주요 문제였으면 좋겠다. 대부분의 경우 과도하게 프로비저닝된 하드웨어를 볼 수 있지만 SQL Server를 잘못 배포했습니다. 샘플 질문 중 일부를 보자, 나는 종종받을 수 있습니다.

  • 우리의 CPU가 100 %를 실행, 우리는 더 많은 CPU를 제공해야합니까?
  • 우리의 메모리는 SQL Server에 의해 95 % 혼란스럽습니다.
  • 디스크 대기열은 항상 매우 높으며 디스크와 별도의 워크로드를 추가해야 합니까?

솔직히, 당신은 항상 더 많은 하드웨어를 던져 성능을 향상시킬 수 있지만, 그 로 시작하는 것은 결코 사실이 아니다. 더 많은 하드웨어를 제공 하면 일시적으로 문제를 해결할 수 있습니다 하지만 영구적인 솔루션되지 않을 수 있습니다. 하나는 리소스가 소비되는 방법을 보고 하드웨어의 결정을 기반으로 하는 보다 과학적 방법을 거쳐야 합니다.

100건의 성능 튜닝 사례 중 3건에서 하드웨어를 업그레이드하는 것이 좋습니다. 대부분의 경우 CPU, IO 및 메모리와 관련된 느린 성능 문제를 해결할 수 있습니다.

성능 저하 및 지식

모든 문제에 대한 해결책은 매우 간단합니다 – 지식. 데이터 플랫폼 분야의 전문가라면 앞으로 다가올 모든 과제보다 앞서 나갈 수 있도록 계속해서 학습하고 발전해야 합니다.

서버가 느리게 실행되고 그것에 대해 토론하고자하는 경우,이 주제에 대한 자세한 논의를 위해 나에게 연락 하는 것을 망설이지 말고, 포괄적 인 데이터베이스 성능 상태 확인. 나는 당신의 서버의 건강에 대해 당신에게 이야기하고 당신이 성공을 위해 설정하는 데 도움이행복 할 것이다 .

당신은 항상 트위터와 링크드 인에나와 함께 연결할 수 있습니다 .

참고 : 피날 데이브(https://blog.sqlauthority.com)

 

출처: <https://blog.sqlauthority.com/2020/02/10/sql-server-top-reasons-for-slow-performance/>

MSSQL R Service 권한 부여

EXEC sp_configure ‘external scripts enabled’, 1
RECONFIGURE WITH OVERRIDE

EXEC sp_configure ‘external scripts enabled’

USE <database_name>
GO
GRANT EXECUTE ANY EXTERNAL SCRIPT TO [UserName]

EXEC sp_execute_external_script @language =N’R’,
@script=N’
OutputDataSet <- InputDataSet;
‘,
@input_data_1 =N’SELECT 1 AS hello’
WITH RESULT SETS (([hello] int not null));
GO
스크립트 테스트 실행 hello 1 출력

 

1. Sql Server R 설정 확인
+ R Test
exec sp_execute_external_script @language =N’R’,
@script=N’OutputDataSet<-InputDataSet’,
@input_data_1 =N’select 1 as hello’
with result sets (([hello] int not null));
go
==> hello : 1
+ 에러시 아래 쿼리 실행 후 SQL Server Restart
exec sp_configure ‘external scripts enabled’, 1
reconfigure with override

2. pakage 설치
+ 설치 대상 Package : SixSigma
+ install 방법
1) R GUI 관리자 권한으로 실행
2) SQL R Library 경로 확인 (일반적으로 C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\R_SERVICES\library)
3-1) 패키지 설치
R GUI에 아래와 같이 입력
lib.sql <- “C:/Program Files/Microsoft SQL Server/MSSQL13.MSSQLSERVER/R_SERVICES/library”
install.packages(“SixSigma”, dependencies=T, lib=lib.sql)
3-2) zip 파일로 설치시
install.packages(“패키지 zip 파일 경로”, repos = NULL, type = “win.binary”, lib=lib.sql)
4) 설치 확인 (아래 쿼리로 확인)
exec sp_execute_external_script
@language =N’R’
, @script=N’
library(SixSigma)
OutputDataSet <- InputDataSet’
, @input_data_1 =N’select 1 as hello’
with result sets (([hello] int not null));
(에러 없이 ‘1’ 나와야 설치 성공임)