SQL 서버를 만드는데 속도에 영향을 끼치는것이 어떤것이 있나요??

   조회 3911   추천 0    

좀 대량으로 데이터를 받아오고 계산하고 출력해 내는 작업을 하고있습니다.

물론 제기준에 대량이긴 하지만

테이블당 한 10~20만개정도씩 30개정도 테이블이 있습니다.


찾아보니..속도 높이는데는 쿼리문을 잘 짜야하야하는것이 우선인것 같긴하지만...

현재까지 작업을 하는데 거의 모든 에너지가 소진되었습니다.

하드웨어를 좀 변경하여서 데이터 수집/계산/출력 속도를 좀 높이고싶은데

하드웨어 사용률을 보니 15~20%정도로 메모리는 300메가정도 사용을 하는것 같습니다.

CPU 코어/쓰레드, 네트워크 구성 등을 좀 변경해서 속도개선을 할 방법이 있을까요?

짧은글 일수록 신중하게.
구차니 2020-05
메모리가 300메가 사용이라면.. 메모리 늘린다고 속도가 빨라질건 아닌 것 같고 쿼리문 최적화가 답이 아닐까 생각됩니다.
     
대한민국 2020-05
후....그렇겠지요?
더이상 코드 건드릴 엄두는 나지가 않아 일단 차선책으로 두고있습니다...ㅎㅎ
2c장규식 2020-05
인덱스정도요 퀘리최적화외에
     
대한민국 2020-05
가능한것은 인덱스 넣었습니다. 감사합니다...
하셀호프 2020-05
     
대한민국 2020-05
감사합니다^^
캔위드 2020-05
튜닝이 답입니다.

다만..
이런건 있어요.
각 전문가 별로 생각하는건 조금씩 다를 수 있습니다.
자기 전문분야에 따라서.. 즉 본인이 아는 만큼 보이거든요
     
대한민국 2020-05
하아...어느것하나 전문인게 없는게 문제네요 ㅎㅎ
일단 서버틀어서 운용하고 최적화작업은 체력좀 채우고 들어가봐야할것 같습니다.
술이 2020-05
대용량 테이블은 인덱스 안타는게 대부분입니다.
오히려 인덱스가 성능을 더 하락시키는 경우도 생길수 있어요.
DW 나 레포팅 역할을 하는 서버일거 같은데 테이블 조인하여 출력하는거라면 TEMP 쪽을 SSD로 배치하는겁니다.
대용량을 수집하고 출력하는건 디스크 IO속도에 좌우합니다.
SQL엔진이 뭐냐에따라 달라질수도 있습니다. 운영중인 서버에서 긁어오는건지 아니면 현재 OLTP 역할을 하는 서버에서 결과값을 도출하고 싶은건지 시나리오에 따라 성능이 많이 달라집니다.
그리고 성능분석을 하고 어디를 보완해야할지 결론을 내야지 하드웨어빨로 밀어부칠려고 했다간 돈만 날릴수 있습니다.
     
대한민국 2020-05
일단 현재는 도커에 올려놓은 상태이고 SSD쪽에 볼륨을 배당해놓았습니다.
운영중인 서버에서 긁어오는것은 도커 상에 백엔드 네트워크를 따로 만들어 연결해놓았고 외부에서 수집해오는것만 프론트엔드 네트워크를 사용하고있습니다.
mariadb로 작업을 하였습니다.

일단 조언해주신부분들중 대부분의 의견이 최적화로 몰리는것을 보니 아무래도 좀 쉬었다가 코드를 다시 만져봐야할것 같습니다.

좋은 답변 감사드립니다
제온프로 2020-05
하드웨어 부분만 보면..

코어보다는 클럭높은 CPU
메모리는 최대한 만이 256GB 정도..
SSD x8EA  RAID 10를 추천합니다..
     
대한민국 2020-05
클럭높은 CPU 기억해두었다가 서버교체시 비교테스트 해보겠습니다!
수집하는 데이터량과 처리하는 데이터량이 대략 얼마나 되는지요? 그리고 총 DB사이즈는 얼마나 되는지요?

생각을 조금 전환해보자면 데이터 입력을 반드시 프로그램을 통해서만 하려고 하지 마세요.
mysqlimport나 load data 문을 이용하면 루프돌리면서 쪼개서  insert 하는것보다 수배 수십배 빠르기도 합니다.
mysqlimport 의 경우에는  multi thread 도 이용할 수 있구요. 즉 어떤 경우에는 그냥 수집된 데이터를 파일로 만든 다음에
일괄로 DB서버에 넣는게 더 빠르다는 이야기입니다.

레코드가 아주 많다면 마찬가지로 가져오시는것도 전체적으로 가져오는 것이 아니고
특정 조건이라면 테이블 파티셔닝을 해두고 가져오시면 where 절을 이용해서 가져오는것보다 훨씬 빠릅니다.
     
술이 2020-05
이게 벌크 인서트라고 하는데 이건 처음 단번에 데이터 때려 넣을때 하는건데 모든게 이런 방법을 사용할수 있는건 아니에요. 상황에따라 사용할수 있는거고 대부분 서비스 오픈하기전에 기존 데이터 마이그레이션 할때 자주 사용하곤 합니다. 서비스 중에는 좀 리스크가 있어요.
     
대한민국 2020-05
수집하는 데이터는 한 7~80만개정도 될듯하고 처리해야하는 DB가 한 200~300만개정도 될듯싶습니다.
DB사이즈는 많아야 5G정도 되지 않을까 싶습니다.
음....수학적 수식이 꽤나 많이 적용되고...조건에따라 적용을 해야하는 SQL쿼리가 너무 다양해서 DB에 직접 넣기는 무리가 있습니다...
외부 데이터를 수집하는데는 한 7시간정도면 되는것 같은데 수집한 데이터를 바탕으로 계산해서 다시 집어넣는 DB가 한 3일은 돌려야 되는것 같습니다...
말씀해주신내용 바탕으로 한번 검색해보고 방법을 강구해보도록 하겠습니다. 감사합니다^^
          
술이 2020-05
SQL 엔진을 바꿔야 하지 않을까 생각드네요. 함수도 많이 사용하고 하면 인덱스 잘 안타기도 하고 그리고 mariadb 는 단순서비스 및 리스크 적은 로그성 테이블 위주로 많이 사용하는데 이와같은 DW 및 레포트 용도 서버는 오라클, MSSQL, 티베로 쪽입니다.
               
대한민국 2020-05
말씀하신것 기반으로 찾아보니 오라클이 훨씬 좋아보이네요.
혹시 PostgreSQL은 어떤가요?
               
대한민국 2020-05
일단 궁여지책으로 mariadb/mysql은 1PC 1코어만 갈구는듯하여 SQL서버는 그대로 두고 작업용 ubuntu 서버를 5개로 배분하여 동시에 갈구도록 하니 시간이 1/5로 줄어들긴 하는군요...


QnA
제목Page 1056/5724
2014-05   5234502   정은준1
2015-12   1760838   백메가
2020-05   3942   그린
2020-05   5727   스플라인
2020-05   4934   홈서버가동중
2020-05   2635   정연
2020-05   6143   길가던뉴비
2020-05   2238   거름밭에허…
2020-05   2895   Noname1
2020-05   6937   그린
2020-05   3895   Frinc
2020-05   3912   대한민국
2020-05   3319   galaxyfamily
2020-05   2052   미수맨
2020-05   4951   일론머스크
2020-05   2069   일환
2020-05   3329   박경호
2020-05   4090   허인구마틴
2020-05   4693   홀릭0o0
2020-05   2761   다가도
2020-05   3733   햇님반변강쇠
2020-05   3114   오성기