MySQL_Section
-
Query Tuning 예제MySQL_Section/query 2014. 11. 13. 16:32
안녕하세요 mysql에서 해당 sql 실행 결과가 너무 늦게 나와서 문의를 드립니다. sql문과 explain을 보시고 결과가 늦게 나오는 이유에 대해 조언 부탁드립니다. 감사합니다. sql문 : select c.yyyy , c.quota seq , substring(FN_GET_COMPANY_AVG_2(c.YYYY,c.quota,c.company),1,2) total_users_avgfrom quota_date c use index (idx_yyyy, idx_company, idx_quota) inner join UHC_MEASURE_PHYSICAL a on a.yyyy = c.yyyy inner join UHC_USER_INFO b on a.USER_ID=b.USER_IDwhere c.company ..
-
MySQL에서 커버링 인덱스로 쿼리 성능을 높여보자!!MySQL_Section/developer 2014. 11. 13. 16:27
안녕하세요. 오늘 짧지만 재미있는 내용을 하나 공유할까 합니다. 커버링 인덱스(Covering Index)라는 내용인데, 대용량 데이터 처리 시 적절하게 커버링 인덱스를 활용하여 쿼리를 작성하면 성능을 상당 부분 높일 수 있습니다. 커버링 인덱스란? 커버링 인덱스란 원하는 데이터를 인덱스에서만 추출할 수 있는 인덱스를 의미합니다. B-Tree 스캔만으로 원하는 데이터를 가져올 수 있으며, 칼럼을 읽기 위해 굳이 데이터 블록을 보지 않아도 됩니다. 인덱스는 행 전체 크기보다 훨씬 작으며, 인덱스 값에 따라 정렬이 되기 때문에 Sequential Read 접근할 수 있기 때문에, 커버링 인덱스를 사용하면 결과적으로 쿼리 성능을 비약적으로 올릴 수 있습니다. 백문이 불여일견! 아래 테스트를 보시죠. 테이블 생..
-
MySQL Index 관리편MySQL_Section/운영 2014. 11. 13. 16:02
요새 MySQL을 다루고 있어서 검색하는 중에 괜찮은 글이 있어 정리해둔다. 테이블 설계 시 유의 사항 1. 반드시 Primary Key를 정의하고 최대한 작은 데이터 타입을 선정한다.로그 성 테이블에도기본적으로 PK 생성을 원칙으로 함InnoDB에서 PK는인덱스와 밀접한 관계를 가지므로 최대한 작은 데이터 타입을 가지도록 유지 2. 테이블 Primary Key는 auto_increment를 사용한다.InnoDB에서는 기본키 순서로 데이터가 저장되므로, Random PK 저장 시 불필요한 DISK I/O가 발생 가능InnoDB의 PK는절대 갱신되지 않도록 유지(갱신 시 갱신된 행이후 데이터를 하나씩 새 위치로 옮겨야 함) 3. 데이터 타입은 최대한 작게 설계한다.시간정보는MySQL데이터 타입 date/d..
-
[실무] 프리페어리드 스테이트먼트MySQL_Section/developer 2014. 11. 13. 16:01
위메프 실무 프리페어리드 스테이트먼트 EXPLAIN EXTENDED SELECT @reply_time:=reply_time FROM cs_partner FORCE INDEX(IDX_MID_DEALID) WHERE deal_id = 128335 AND order_id = 35656659 SELECT @reply_time FROM cs_partner WHERE deal_id= 128335 AND @reply_time = 1 SHOW INDEX FROM cs_partner SELECT COUNT(*) FROM cs_partner SET @var_user_id = 'Fantine'; SET @var_user_name = 'Anne'; SET @var_query = CONCAT('explain extended S..
-
mysql-admin-cookbook 책에서 'Monitoring and Analyzing MySQL Installation'MySQL_Section/운영 2014. 11. 13. 16:00
이 문서는 mysql-admin-cookbook 책에서 'Monitoring and Analyzing MySQL Installation' 을 정리한 것입니다. 1.InnoDB Tablespace 빈공간 체크하기. MySQL의 디폴트 엔진인 'MyISAM'의 경우 각각의 테이블들에 대응하여 파일시스템상에서 파일들이 생성이 되어진다. 따라서 데이터가 계속 쌓인다 하더라도 파일시스템상에 빈공간이 남아있으면 별문제가 되지 않는다. 하지만 InnoDB는 다르다. 확인하는 방법은 모든 데이터베이스에 테이블들에 대해서 다음과 같이 확인을 하는 것이다. [code sql] SELECT DATA_FREE/(1024*1024) AS FREE_MB, TABLE_SCHEMA, TABLE_NAME FROM INFORMATION..
-
JMeter를 이용한 JDBC 테스트MySQL_Section/운영 2014. 11. 13. 15:58
JMeter를 이용한 JDBC 테스트 + [programming] | 2013/07/26 17:13 DBMS의 성능 지표를 나타내는 여러 기준이 있지만 그 중 가장 대표적인 것 중 하나가 SysBench 입니다.SysBench는 MySQL Sever Benchmarking으로 만들어 졌지만 이제는 다양한 database 성능 테스트를 지원하고, CPU, Threads, Mutex, Memory, File I/O 성능 테스트 까지 그 영역을 넓혀가고 있는 중입니다.하지만 SysBench는 특정 쿼리를 통한 성능 테스트가 불가능 하며, GUI 미지원 및 결과 레포트의 부실함 등의 한계를 가지고 있어서 JMeter를 이용한 JDBC 벤치마크를 만들어 보도록 하겠습니다. Sysbench OLTP Bechmark..
-
MySQL을 NOSQL 로 사용하기MySQL_Section/운영 2014. 11. 13. 15:54
저자 Yoshinori Matsunobu 시작하며 - 일반 서버로 초당 750000 쿼리를 초과한 이야기 대부분의 대규모 웹 응용프로그램들은 MySQL과 memcached를 사용합니다. 그 중 대부분은 TokyoCabinet/Tyrant 같은 NoSQL도 사용하고 있습니다. 몇몇 경우, 사람들은 MySQL을 배제하고, NoSQL과 구분해두었습니다. NoSQL이 MySQL보다 primary key 검색과 같은 단순 접근 패턴에서 훨씬 뛰어나다는 이유로 말입니다. 웹 응용프로그램들로부터 받는 대부분의 쿼리는 단순하기 때문에 이러한 결정이 합리적인 판단으로 보입니다. 다른 대규모 웹 사이트들처럼 DeNA도 몇 년 동안 동일한 문제를 갖고 있었습니다. 그러나 우리는 다른 결과에 도달하였습니다. 지금도 우리는 M..
-
Mysql max_connect_errorsMySQL_Section/운영 2014. 11. 13. 15:51
Mysql max_connect_errors MySQL의 경우, 접속(access)은 항상 사용자 이름과 호스트 이름(또는 IP 주소)의 조합, 그리고 패스워드를 기반으로 승인이 이루어 진다-예를 들면, jcole@foo.example.bar 는 유효한 사용자 이름과 호스트 이름의 조합이다. 커넥션되는 클라이언트의 “네트워크 크레덴션(network credentials)”을 검증하기 위해서, MySQL은 인커밍 커넥션(incoming connection)의 IP 상에서 “이중 역방향-DNS 검색(double reverse-DNS lookup)”방식을 사용한다. 간단히 말하자면, MySQL은 우선 gethostbyaddr() 또는 이와 유사한 함수를 사용하여 역방향-DNS 검색을 경유하는 인커밍 커넥션의 ..