HOME > 게시판 > 데이터베이스
게시판| 데이터베이스
※ 게시판 용도에 맞지 않는 글(광고및 홍보 글 등)은 임의삭제될 수 있습니다.

 
작성일 : 14-05-28 13:58
MySQL my.cnf 옵션 설정 문의
 글쓴이 : Jszzang
조회 : 1,442  

뭐 서버사양에 따라 MySQL 쿼리 퍼포먼스는 다르겠지만
제가 궁금한 것은 일반적인 정도를 알고 싶은 것입니다.

기준은 솔루션이나 환경기준에 따라 다르겠지만 대략 저는 5분 내로 쿼리가 끝나기리 바랍니다.
혹은 MySQL에서 이정도 RAWS 수면 사실 처리하기가 버겁다라는 이런 정도의 수치를 알고 싶습니다.

Question 1 ) MySQL join 쿼리에서 버거운 RAWS 수

Question 2 ) 아래 my.cnf에서 MySQL이 최대로 사용할 MEM 계산법
             (A+B+C)*maxconnection 이런식으로요.....


그럼 아래 상황의 예를 봐주세요.


1) 서버 (환경은 좀 구리죠?! 옛날 장비라 그래요)

vendor_id : AuthenticAMD
model name : Dual Core AMD Opteron(tm) Processor 285 * 2
mem : 4GB

2) Query (join액션)

SELECT T.pageDiv AS dp,D.dt AS dt,D.seq AS seq
, sum(T.hitCount) AS cnt
, sum(T.hitCount2) AS uv
, sum(T.hitCount3) AS sum
, sum(T.hitCount3)/sum(T.hitCount2) AS sumperuv
, sum(T.hitCount)/sum(T.hitCount2) AS pv
FROM trkStatDayPG_Slot_1 T LEFT JOIN trkdp_Slot_1 D ON (T.loggerId = D.loggerId and T.pageDiv = D.dp)
WHERE T.loggerId = '1001'
AND   T.statDate in ( '2013-11-01',.......,'2014-04-30' )
GROUP BY dp,dt,seq
HAVING dt != '#DELETE'
ORDER BY sum DESC
LIMIT 0,20;

-- 각 테이블 RAWS 수
select count(*) from trkStatMonthPG_Slot_1;
+----------+
| count(*) |
+----------+
|  1808437 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from trkdp_Slot_1;
+----------+
| count(*) |
+----------+
|   716882 |
+----------+
1 row in set (0.00 sec)


3) 실행시간

1~2분정도 걸렸습니다.
그런데 이쿼리와 다른 처리쿼리가 동시에 발생되면 서로 Lock가 걸릴때도 있고
미쳤을때는 대드락이 걸려서 바보가 되는 경우도 있지요.


4) my.cnf

* 위 쿼리 시 Copying to tmp table on disk 로 떨어지면서 스왑을 막 써대는거 보니
my.cnf 파일도 튜닝이 필요해 보입니다.(총메모리가 부족한것일수도 있겠지요)
해당 액션으로만 스왑을 한 2~300사용하네요. ㅡㅡ;

# The following options will be passed to all MySQL clients
[client]
port            = 3306
socket          = /tmp/mysql.sock

# The MySQL server
[mysqld]
datadir=/data/data51
# server-id = 1
# log-bin
port            = 3306
socket          = /tmp/mysql.sock
skip-locking
#key_buffer = 250M
key_buffer = 500M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 4M
read_buffer_size = 4M
join_buffer_size = 4M

tmp_table_size = 50M
max_connections = 300
myisam_sort_buffer_size = 100M
thread_cache_size = 10
back_log = 1000
read_rnd_buffer_size = 3M
query_cache_type = 1
query_cache_limit = 2M
query_cache_size = 20M
thread_concurrency = 8
wait_timeout = 30000
open_files_limit = 8192
max_connect_errors = 999999999
max_heap_table_size = 200000000

character-set-client-handshake=FALSE
#default-character-set=euckr
character-set-server=euckr
innodb_file_per_table

# Uncomment the following if you are using InnoDB tables
# innodb_data_file_path = ibdata1:1000M;ibdata2:1000M:autoextend
#innodb_buffer_pool_size = 512M
innodb_buffer_pool_size = 1024M
innodb_additional_mem_pool_size = 100M

#innodb_log_file_size = 30M
#innodb_log_buffer_size = 2M
innodb_flush_log_at_trx_commit = 0
innodb_lock_wait_timeout = 5
#innodb_file_per_table

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer = 80M
sort_buffer_size = 80M
read_buffer = 1M
write_buffer = 1M

[mysqlhotcopy]
interactive-timeout


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기