아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
탈퇴한 사용자
탈퇴한 사용자21.03.27

데이터베이스 성능개선에 있어서 중요한 요소는 뭔가요?

성능 개선에 있어서 가장 중요하다싶은게 뭔가해서요.

시스템 성능 개선이나 설계변경, 프로그램 로직 변경이런것이 있을텐데...

가장 중요하게 생각하시는 게 뭔지 궁금해서 묻습니다.

적절한 답변을 기대합니다.

55글자 더 채워주세요.
답변의 개수
17개의 답변이 있어요!
  • 근사한삵163
    근사한삵16321.03.27

    먼저 서버가 좋아야 하지만 그부분은 성능개선과 관련이 없으니 제외시키고, 우선 서버 안에 데이터베이스의 테이블 관계도가 명확해야합니다.

    테이블이 생성전이면 차후에 확장까지 고려해서 작성해야하고

    생성후면 다른 테이블을 경우하여 가는 경우 성능이 지연됩니다. 테이블을 하나로 합치고 하나의 열에서 처리할수 있도록 최대한 로직을 압축해서 짜야합니다. 서버와 잦은 데이터 주고 받는 것은 사용자가 늘어남과 사용자의 변경이 잦아지면서 동시에 서버 성능저하 및 과부화로 인한 서버다운까지 야기합니다


  • 안녕하세요~?

    시스템 성능을 개선하고자 하신다면 가장 중요한 것은

    현재 시스템에서 어떤 부분에서 많은 지연이 발생하고 있는지 파악하는게 가장 우선입니다.

    만약 DB 쿼리에서 슬로우 쿼리가 발생하여 지연이 발생한다고 가정을 한다면

    explain 명령어를 이용하여 해당 쿼리의 성능을 먼저 파악 해보시길 바랍니다.

    그 이후 테이블의 적절한 인덱스 처리가 되었는지 확인해보시고 테이블 컬럼의 타입 설정이

    적절히 데이터에 맞게 설정 되었는지 확인이 필요 합니다.

    테이블의 데이터가 얼마나 될지 모르겠지만

    예를 들어 50만건 정도의 데이터가 테이블에 들어있다면 위 사항을 고려하여

    적용 전, 후 를 비교해서 쿼리 성능을 비교해보시면 많은 도움 되실거에요 ~!


  • 데이터베이스의 성능 개선에 앞서 데이터베이스의 성능에 가능 큰 영향을 주는 것이 어떠한 요소인지 먼저 파악을 해야 합니다.

    비유적으로 아래의 그림과 같이 깨진 유리잔이 있다고 가정해봅니다.

    이 유리잔에는 얼만큼의 물을 담을 수 있을까요?
    처음 물을 부을 때는 깨지기 전 유리잔과 큰 차이가 없을지도 모릅니다.
    하지만 물을 붓다보면 깨진 높이 이상으로는 물이 흘러나와서 담을 수 없습니다.

    깨진다는 것 자체는 여러가지 원인이 있을 수 있습니다.
    잘못 작성된 데이터 스키마, 잘못 작성된 애플리케이션, 잘못 작성된 쿼리 등 입니다.


    데이터베이스의 성능 저하의 중심에는 데이터가 있습니다.
    즉 위의 비유에서 은 데이터베이스의 데이터입니다.

    데이터베이스에 데이터가 없을 경우에는 성능 차이가 두드러지 않습니다.
    따라서 데이터를 액세스하는 부분에 대해 어느정도 비효율이 존재하더라고 성능에는 큰 문제가 없을 수 있습니다.
    하지만 데이터가 점점 커지면서 성능 저하의 부작용 (예. 느린 데이터 조회, 반응속도, 장애 등)이 나타납니다.

    질문하신 분은 데이터베이스 성능개선에 있어서 중요한 요소에 대해 물어보았습니다.
    여러가지 요소들이 있기 때문에 케이스에 맞추어서 개선을 해야 할 것 습니다.
    경험적으로 실무에서 발견되는 일반적인 요소에는 인덱스가 있었습니다.

    인덱스가 아예 없어서 데이터가 늘어나면서 엑세스가 늘어나는 경우도 있었고, 인덱스가 만들어져 있었지만 쿼리가 순차 검색을 하도록 만들어져 있어서 실제로 인덱스가 무의미한 경우도 있었습니다.
    또한 사용하지 않는 인덱스를 너무 많이 만들어 놓아 데이터가 추가 될 때 성능 저하를 일으키는 경우도 있었습니다.

    따라서 인덱스가 제가 생각하는 데이터베이스 성능개선에 있어서 중요한 요소 중에 쉽게 떠올릴 수 있는 요소입니다.


  • 첫번째는 dbms 엔진 최적화이고 두번째는 sql최적화 입니다. 첫번째는 엔진 파라미터, 설정파일의 크기 등에 의해 좌우되고, hw스펙(cpu core수, 메모리 용량 등)에 의해 영향을 받습니다. 두번째는 sql에 대해서 인덱스, 조인 등등을 통해 개별 sql의 자원사용률, 속도 등 개선을 통해 전체적인 속도 개선이 가능합니다.


  • 1. DB옵션

    - DB에서 최대사용 메모리, connection max count등 옵션타협

    2. SQL

    - 쿼리튜닝. 같은 결과를 뽑더라도 쿼리를 어떻게 짜느냐에따라 속도 차이발생.

    예를 들어 인덱스걸린 필드로 조건을 넣었을때와 인덱스없는 필드로 조건을 넣었을때 엄청난 속도차이. 테이블 데이터가 몇건 안될때는 차이를 모를수도있으나 건수가 많아질수록 기하급수적 차이를 보임.

    3. 테이블스키마

    - 적재적소에 index pk fk키를 잘 지정하였는가

    - mysql의경우 테이블 생성시 innodb myisam 2가지로 생성가능.

    innodb는 테이블복구 등이 myisam에 비해 좋은성능을 보이나 로컬시스템의 메모리와 용량을 많이 차지함.

    myisam의경우 insert update delete이 자주사용되는 테이블보다 select위주의 테이블에 지정할경우 성능상유리함

    ***같은 스펙의 서버를 주더라도 위의 3가지를 잘 지켰는지 안지켰는지에 따라서 엄청난 차이를 보임. 쿼리했을때 DB가 뻗어 버리는 경우도 위의 3가지만 잘해줘도 몇초이하로 단축가능함.

    서버스펙을 업글하기전에 위의 3가지를 꼭꼭꼭꼭 확인바람


  • 제 경험상, 프로그램에서 성능에 가장 영향을 미치는 것은

    데이터베이스 설계라고 보여요. 프로그램 기획에 맞춰 테이블 설계를 하게 되면,

    프로그램 로직과 연계하여 구성되어서 좋긴 하지만,

    데이터 베이스 라는 것이 집합의 개념에서 구조 자체가 프로그램이 의도한 흐름과 무관하게

    집합적 요소의 연관관계가 중요하다보니, 괴리가 있을 수밖에 없습니다.

    특히, 테이블 관점에서 프로그램에서 소비를 고려해서 설계가 제대로 이뤄져야

    제대로된 프로그램에서 동작하는 성능을 보장할수 있겠지요.

    프로그램 로직 변경과 같은 것은 근본적으로 데이터베이스의 성능과 맞물려서

    조작가능한 부분이 있어서 큰 틀에서 데이터 베이스 설계 만큼

    근본적인 큰 영향을 미치는데는 한계가 있기 마련이죠.

    설계가 건축물의 기초 공사라고 보면, 기초가 부실한 상태에서

    아무리 성을 쌓아봐야 기초가 근본적으로 받쳐주는 것에는

    한계가 있기 마련이죠...

    다분히 개인적인 사담이었습니다.


  • 목적에 따라 다릅니다.

    DB 쿼리의 경우, 예전에는 전문적으로 쿼리를 담당하는 분이 계셨었습니다. 한건하고 2~300받아 가셨죠...

    지금도 쿼리만 해도 2~3페이지가 넘어가는 그런 회사도 있습니다.

    최근엔 객체와 1:1매칭하여 가져오는 방식으로 되어 ORM으로 하는 방식이 선호되고 있습니다.

    예전에 비하여 하드웨어의 발전등이 주요 원인입니다.

    로직의 변경에서도 성능을 끌어올리더라도 유지보수가 어려울 경우, 유지보수를 위해 변경하는 케이스도 있습니다.

    가장 중요한건 목적에 따라 바꾸는 것입니다.

    예를들어 기존 DB양이 1만 정도였는데, 1000만건 이상이 넘어간다면, 속도를 높이는 인덱싱을 위해 메모리를 많이 사용하는 식으로 변경하기도 합니다. 또한 No-sql과 같이 빅데이터는 아닐지라도 많인 통계를 위해서 바꾸고, 2~3중화 하여 DB를 안전하게 하는 장치 샤딩과 같은 작업도 들어가기 때문에, 성능 개선에서 어떤 성능을 개선할 지가 가장 중요한 것입니다.

    이 목적을 정확히 알고 메모리, 트레픽 제어 등 적당항 trade-off가 중요합니다.

    가장 중요한 것은 밸런스를 맞추는 것입니다.


  • 말씀하신 모두 맞습니다. 스팩 자체를 올리면 확실한 성능개선이 이루어 지겠지만, 프로그래머 선에서 해결할 수 있는 문제가 아니죠. 설계 변경의 경우 개발 시점이라면 가능하다 운영 시점에 설계 내용을 변경한다는 건 부담감이 있습니다. 그렇다면 남은건 로직 변경 및 SQL 튜닝입니다. 공수 대비 가장 드라마틱한 효과를 보는 갓은 SQL 튜닝입니다. Index 추가나 SQL 튜닝을 통해 처리 속도를 획기적으로 올릴수 있습니다. 불필요한 로직을 제거하고, 로직을 간결하게 가져가는 것도 시스템 속도를 높이는데 도움이 됩니다.


  • DB 성능개선에 있어서 가장 중요한 부분은 SQL 에 대한 튜닝입니다.

    성능에 문제가 있는 경우 수행되는 PLAN정보를 확인후 적정한 튜닝을 하게됩니다.

    예를 들어 조인상에 index가 없는경우 인덱스를 만들거나, 대용량인 경우 파티션 테이블을 만들기도 합니다. 또는 강제로 SQL 성능을 향상시기기 위해 Hint정보를 추가 하기도 합니다.

    그런 방법으로 문제를 해결할수 없고, 설계 자체에 문제가 있는 경우 설계변경을 결정하게 되지만

    운영중인 서비스의 설계를 변경하는 것은 상당한 리스크와 추가 비용이 발생하게 되므로 의사 결정권자와 협의하여 진행여부를 결정하게 됩니다.


  • 데이터베이스 성능개선은 데이터베이스 종류마다 다를 수 있습니다.

    직접적인 설정을 통해 어느정도 성능개선이 가능하나 DB전문가가 아니라면 수많은 시행착오를 거쳐야 할겁니다.

    개인적으로 추천하는 보편적인 몇가지만 소개드립니다.

    1. 인덱싱

    가장 일반적인 방법입니다. 알면서도 사용하지 않으면 안되겠죠.

    특히, 조건절에 걸리는 unique한 키를 중심으로 인덱싱을 걸면 효과적입니다.

    2. 데이터 캐싱

    데이터 캐싱은 처음 쿼리를 전송할 때는 DB 직접 가져오지만 두 번째 쿼리부터는 캐시에 저장된 데이터를 가져오는 방법으로 매번 데이터베이스까지 직접 쿼리를 전송하지 않아서 쿼리 전송을 줄이는 용도로 사용됩니다.

    잘못 사용하면 성능이 더 안 좋아지므로 자주 사용되는 데이터 위주로 저장하고, 쓰기보다 읽기가 많은 데이터와 데이터 양이 많지 않은 경우 캐싱 하는 것이 좋습니다.

    또한 캐시도 데이터가 쌓이면 속도가 저하되므로 데이터 캐시 만료 기간을 설정해서 사용해야 합니다.

    3. replication

    Main Master DB를 만들고 나머지 DB는 Slave 개념으로 1개 이상 만들어 이 Slave를 분산처리하면 되겠습니다.

    master와 slave는 replication 처리하여 동기화 처리하면 됩니다.

    master는 주로 쓰기와 업데이트 용도로 사용하고 slave는 분산처리하여 읽기전용으로 사용하면 됩니다.

    규모에 따라서 slave 숫자만 늘리면 되므로 자금의 여유가 되는 경우 추천드리는 방법입니다.


  • 안녕하세요.

    요즘 파이썬이 대세라고는 알려져있습니다.

    보편적으로 웹개발이 취업하기도 광범위합니다.

    또한 기본적으로 java는독학하기에도 수월합니다.

    자바스크립트를 시작으로해서 앞부분 프론트를 마무리하고 java로 들어서면서 서비스쪽(조금 더 디테일하게) 배우는것이 괜찮을 것 같습니다.

    자바스크립트는 현재 많이 사용중이므로 쉽게 접근하실 수 있습니다.

    감사합니다.


  • 데이터베이스 성능개선을 할 때 제일 먼저 생각하는 것은 인덱싱입니다.

    찾고자하는 데이터의 키에 대한 인덱싱이 제대로 생성되었는지, 실행하고자 하는 쿼리에서 해당 인덱스를 잘 타는지 확인해봅니다.

    PLAN 이라는 기능을 이용해 인덱싱이 제대로 걸리는지 확인해볼 수 있습니다.

    다음으로 기본적으로 데이터를 조회하는 데에서는 문제가 없다고 하면,

    복잡한 쿼리를 사용하는 데에 있어 비효율적으로 쿼리가 설계되었는지를 살펴봅니다.

    JOIN, 서브쿼리, GROUP BY, CONNECTED BY 등등 복잡한 쿼리를 효율적으로 변환할 수 있는지 살펴봅니다.

    2개 이상의 테이블을 따로 조회해서 프로그램으로 처리하는게 빠르다면 복잡한 쿼리를 사용하는 것보다 나은 경우도 있습니다.

    마지막으로 데이터베이스의 양이 많을 때 병렬로 처리할 수 있는지를 살펴봅니다.

    예를 들면 증권사의 경우에는 지점별로 처리하는 업무가 많습니다.

    그렇다면 같은 배치처리라도 지점별로 처리한다면 한 테이블 안에서도 Lock 없이 병렬로 처리 가능합니다.

    마지막 팁을 드리자면, 성능개선을 위해 중간단계의 데이터를 저장해놓는 방법도 있습니다.

    기간별 데이터 합산을 하는 경우, 하루에도 많은 데이터가 발생한다면 일별 합산데이터를 생성해 놓는다면, 기간별데이터를 생성할 때 많은 시간단축이 가능합니다.

    질문자께서 좋은 인사이트를 얻어가셨기 바랍니다.


  • 안녕하세요. A-HA 프로그래밍 전문가입니다.

    DB 성능 개선을 확인할 때 가장 중요한건 테이블의 구조입니다.

    어떻게 조인을 하고, 어떤 데이터를 서로 가지고 있는지가 가장 중요하기 때문에

    테이블 정규화 및 최적화를 먼저 해주시는게 좋습니다.

    그 이후에는 조회 조건에 따른 인덱스 생성, 이력 테이블인 경우는 파티션 테이블로 변경 등을 해주시면 되죠.

    마지막으로 힌트를 통해 쿼리 성능을 향상시키는 방법도 있습니다.


  • MS-SQL, Oracle 사용중인 현직자 입니다.

    하드웨어 측면 : CPU, 메모리, 디스크 등등

    소프트웨어 측면 : 숲부터 시작하자면 테이블 구성, 테이블 관계도부터 시작 됩니다. 숲 구성이 완료 된 후 데이터 베이스 디자인, SQL 문 프로시저인 나무를 구성

    간단하게 요약 하자면 아래와 같을 것 같습니다.

    1. 먼저 성능 개선이 왜 필요한지부터 문제점 파악에서 출발

    2. 위 언급한 하드웨어 측면에서 문제인지 소프트웨어 측면 문제인지 파악

    3. 문제가 되는 부분 수정

    하드웨어적 문제라면 Core 수정, 메모리 증설 등등.... 소프트웨어적 문제라면 데이터베이스 재구성, 쿼리 튜닝, 프로시저 수정, 인덱스 생성 등등...이 문제점 해결 방법이 될 것 같습니다.

    위 언급한 각 단계별로 상세 설정은 모두 다 다르고 광범위하여, 위 언급된 부분에서 문제점 파악 후 상세 해결방법을 모색하는 식으로 나가면 됩니다.


  • 안녕하세요.

    성능 개선의 대상의 범위가 어떤거냐에 따라 다르지 않을까 싶네요.

    데이터베이스 상에서 데이터베이스에서 사용할 수 있는 자원이 모자른다거나 전체적으로 돌아가는 쿼리의 성능이 떨어진다고 한다면 데이터베이스 자체의 성능을 키우는 방법을 생각해 볼 것이고

    특정 쿼리에서의 성능이 떨어지 것 이라면 해당 쿼리의 성능 개선을 위해 할 수 있는 것이 무엇인지 찾아봐야 할 것 입니다.

    쿼리에 사용되는 테이블의 설계는 적절하게 이루어 졌는지, 테이블에 필요한 인덱스가 존재하는지, 있다면 인덱스는 제대로 타고 있는지, 조인이 되는 컬럼들의 데이터 타입은 일치하는지 등을 찾아보는게 우선인것 같습니다.


  • 안녕하세요

    데이터베이스 성능개선에 있어서 중요한 요소를 물어보셨네요

    우선 프로그램 로직 변경이 되어야 할것이냐 설계또한 변경이 되어야 합니다.

    프로그램 성능 개선에 있어서 로직과 설계는 중요 한 부분이구요 .

    우선 가장 중요한 부분은 데이터베이스 Call수를 줄이고 네트워크 부하를 줄여야된다고 생각되어 자세히 설명되어 있는 링크 첨부하여 드리겠습니다.

    성능개선에 있어서 다양한 방법들이 있습니다.

    추가적으로 검색 또는 자료들을 찾아보시면 더욱 좋을것 같습니다.

    링크 : https://jeong-pro.tistory.com/158 정 아마추어 라는 블로거 분께서 성능 개선 포인트에 대해 정리를 잘해놓으셔서 추천드립니다.


  • 데이터 베이스 성능개선을 통해 획기적으로 조회시간을 늘릴 수 있습니다.

    1.장비빨

    2.SQL튜닝

    Sql튜닝에 대한 많은 방법론이 나와있습니다. 저또한 교육을 받기 전까지는 그냥 인덱스 설정해주면 빠르겠지 라고 생각했는데 기본적인 인덱스 외에 다양한 방법들이 있더군요, 예를들어 조인보다 인라인뷰가 유리한 경우도 있구요.

    . 제가 교육받았던 강사님께서 정부쪽 굵직한 서버(예를들면 연말정산 사이트?) 예를들어 주시는데 오라클 튜닝이 엄청나게 성능에 영향을 끼치더라구요

    전문적인 오라클 튜너들의 단가는 어마어마합니다. 그들정도의 퍼포먼스는 힘들더라도 기초적인 학습을통해 성능개선이 가능합니다.

    결론 성능개선에 중요한 요소는

    튜닝 즉, 효율적인 쿼리문과 적절한 인덱스,hint입니다.