블로그 이미지
플로거
Android/J2EE/Web/Spring/Database

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

Notice

Statistics Graph

'Programming/Mysql'에 해당되는 글 2

  1. 2019.01.08 [MySQL] Too many connections 해결 및 기본적인 튜닝
  2. 2013.05.03 MySql 에서의 현재시각 sysdate vs now
2019. 1. 8. 10:37 Programming/Mysql

show variables like '%max_connections%';

=>

"max_connections"         "100"



show status like '%connect%';
=>
"Aborted_connects"         "53"
"Connections"                 "10832"
"Max_used_connections" "101"
"Threads_connected"         "100"



show status like 'Aborted%';
=>
"Aborted_clients"                 "5000"

"Aborted_connects"        "53"


show status like '%thread%';

=>

"Threads_cached"                 "5"

"Threads_connected"         "99"

"Threads_created"                 "1469"

"Threads_running"         "1"



Cache Miss Rate(%) =  Threads_created / Connections * 100
Connection Miss Rate(%) = Aborted_connects / Connections * 100
Connection Usage(%) = Threads_connected / max_connections * 100


Connection Usage(%)가 100% 라면 max_connections 수를 증가시켜 주십시요. Connection 수가 부족할 경우  ==> Too Many Connection 에러

==> max_connections 를 올려줌 


DB 서버의 접속이 많은 경우는 wait_timeout 을 최대한 적게 (30 정도를 추천) 설정하여 불필요한 연결을 빨리 정리필요. 그러나 Connection Miss Rate(%) 가 1% 이상이 된다면 wait_timeout 을 좀 더 길게 가져야 함. 


Cache Miss Rate(%) 가 높다면 thread_cache_size를 기본값인 8 보다 높게 설정하는 것이 좋습니다. 일반적으로 threads_connected 가 Peak-time 시 보다 약간 낮은 수치로 설정


MySQL 서버는 외부로 부터 접속 요청을 받을 경우 인증을 위해 IP 주소를 호스트네임으로 바꾸는 과정을 수행하여 접속시에 불필요한 부하 발생. 

my.cnf에서 skip-name-resolve를 설정, 접속시 IP 기반으로 접속을 하게 되면 hostname lookup 과정 생략되어 좀 더 빠르게 접속 가능


[권한필요 - root]
set global max_connections = 500;
set wait_timeout = 30;

[vi /etc/my.cnf]

skip-name-resolve


posted by 훈즈 플로거

댓글을 달아 주세요

2013. 5. 3. 11:33 Programming/Mysql


MySql 에서 현재시각을 위한 함수 sysdate() 와 now()


두 함수 모두 현재시각을 반환하지만, 몇가지 차이가 있음.


하나의 SQL 문에서 여러번 now()가 사용된 경우, now() 는 동일한 결과를 반환, 

sysdate()는 동일 SQL 문 내에서도 호출되는 시점에 따라 결과값이 달라짐.


example> select now(), sysdate(), sleep(5), now(), sysdate();


result>

 now()  sysdate()  sleep(5)  now()  sysdate()
 2013-05-03 오전 11:18:31  2013-05-03 오전 11:18:31

5

 2013-05-03 오전 11:18:31  2013-05-03 오전 11:18:36


sleep(5)를 통해 중간에 5초동안 대기 시킴.


위 결과에서 보듯이, 첫번째 now() 두번째 now() 는 동일한 시간을 보여주지만,

첫번째 sysdate()와 두번째 sysdate()는 sleep(5) 시간만큼의 차이를 보여줌.


[sysdate() 사용시 발생할 수 있는 문제점]

1. 다중 Database  Master/Slave  형태의  Database 구성시 Master 와 Slave간의 시간이 다르게 되는 상황이 발생할 수 있음.

2. sysdate() 컬럼 비교시  index가 효율적으로 사용되지 못하고 Full Table Scan 이 실행된다.


[solution]

sysdate() 대신 now()를 사용하거나, mysql 설정에서  -sysdate-is-now 옵션을 설정하여 sysdate()와 now() 함수를 동일하게 적용할 수 있다.


참조 http://blog.hibrainapps.net/122


posted by 훈즈 플로거

댓글을 달아 주세요

prev 1 next