MySQL Tuning for innodb #1

다즐링의 이미지

간만에 연락을 받고 디비를 튜닝하게 되었습니다.
혹시나 같은 삽질을 하지 않을까 하여 그 기록을 남겨둡니다.

== Chapter 1. 접속 ==

서비스에 대한 개략적인 개요를 듣고 루트를 받고 디비서버에 접속을 하였습니다.
기본적으로 시스템을 보게 되면 다음과 같은 것을 봅니다.
1. 이 시스템에서 도는 서비스는 어떤 것이 있는가?
2. 서비스별로 어떤 디렉토리와 애플리케이션을 쓰는가
3. 어디에 의존성이 걸려 있는가.

먼저 파악한 서비스 이외의 서비스는 다 죽여줍시다.
레드헷의 경우 chkconfig --list 로 확인가능합니다.

== Chapter 2. top, vmstat , free , iostat , mysqladmin 확인 ==

시스템의 전체적인 환경을 보기 위해 top 을 띠워봅시다.
대부분 mysql 전용이면 디비만 딸랑 제일 위에 있을 확률이 높습니다.
명령은 2가지만 보면 됩니다. "P" 와 "M" 입니다.
"P" 는 CPU 사용률 별로 소팅해줍니다.
"M" 은 메모리 사용률별로 소팅해줍니다.

vmstat 을 띠워봅시다. 알아먹기 힘듭니다. -_-; 그냥 참고 합시다.

free 를 띠워봅시다.

[dj@iz4u ~]$ free -mt
             total       used       free     shared    buffers     cached
Mem:          1518       1396        121          0        182        749
-/+ buffers/cache:        464       1053
Swap:          258          0        258
Total:        1777       1396        380

처음의 total 은 전체 메모리입니다. used 는 현재 사용양입니다.
total = free + used 가 됩니다.
그럼 used 는 다음과 같습니다. buffers + cached + 실제 사용량
cached 와 buffers 는 io 나 프로그램을 위한 부분입니다.

즉 현재 시스템의 절반은 프로그램이 돌고 있고 나머지는 캐쉬로 사용중일꺼다 라는 것을 알수 있습니다.

그럼 iostat 을 봅시다. 깔려져 있지 않다면 sysstat 패키지를 까시기 바랍니다.

iostat -d 1 을 쳐봅시다.

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda              19.00         0.00       552.00          0        552
sda1              0.00         0.00         0.00          0          0
sda2             69.00         0.00       552.00          0        552

1초마다 시스템의 io 상황을 보여줍니다.
딱 보면 보이듯이.. 쓰기가 읽어나고 있죠. 캐슁이 많이 된 상태라면 대부분
쓰기만 일어납니다.

그럼 이제 mysqladmin 을 봅시다.
2가지 커맨드만 보시면 됩니다.
mysqladmin processlist
mysqladmin status

먼저 processlist 를 봅시다.

mysqladmin processlist | grep -v Sleep 이라고 칩니다.

[root@XXXXX ~]# mysqladmin processlist | grep -v Sleep
+------+--------+-----------------------+--------+---------+-------+----------------------+------------------------------------------------------------------------------------------------------+
| Id   | User   | Host                  | db     | Command | Time  | State                | Info                                                                                                 |
+------+--------+-----------------------+--------+---------+-------+----------------------+------------------------------------------------------------------------------------------------------+
| 3779 | xxxxxx | 123.13.13.13 | xxxxxxxxxxxxxxx | Query   | 4     | Copying to tmp table | SELECT users.*, favorite.* FROM users, favorite   WHERE (fav |
| 4320 | root   | localhost             |        | Query   | 0     |                      | show processlist                                                                                     |
+------+--------+-----------------------+--------+---------+-------+----------------------+------------------------------------------------------------------------------------------------------+

상태를 보시면 아시겠지만.. 현재 4초가 걸리는 쿼리가 있군요.
status 를 봅시다. Copying to tmp table 입니다. 이것은 대부분 조인시에 결과값을
새로운 테이블을 만들어서 거기서 select를 하기 떄문입니다.

mysql 의 innodb 는 기본적으로 배포판에서 설정이 최소값으로 되어 있습니다. 이러한 부분들 떄문에
어느정도 접속이 있는 디비들에서는 설정값을 바꾸어주어야합니다.

mysqladmin 의 status 를 봅시다.

[root@xxxxx ~]# mysqladmin status
Uptime: 120059  Threads: 73  Questions: 11404688  Slow queries: 1329  Opens: 416  Flush tables: 2  Open tables: 230  Queries per second avg: 94.992

현재 얼마나 돌아가는지나오구요 중요한것은..
Questions 와 Slow queries 입니다. 저 값은 현재 살짝 튜닝이 된 상태라 적게 나오는 편입니다.

다음 이시간에는 기본설정값변경과 그 여파에 대해서 알아봅시다.

댓글

appler의 이미지

다음시간이 기대되는군요;;


laziness, impatience, hubris

不恥下問 - 진정으로 대화를 원하면 겸손하게 모르는 것은 모른다고 말하는 용기가 필요하다.


laziness, impatience, hubris

不恥下問 - 진정으로 대화를 원하면 겸손하게 모르는 것은 모른다고 말하는 용기가 필요하다.

codepage의 이미지

MySQL에대한 튜닝글은 처음보는 것이라서..^^

kirrie의 이미지

딱 보고 실무에 바로 써먹을 수 있는 이런 문서 정말 좋아합니다. +_+
--->
데비안 & 우분투로 대동단결!

--->
데비안 & 우분투로 대동단결!

제디슨의 이미지

MySQL도 튜닝을 하는 군요....
-----------------------------------------------------------------------------
simple is the best, http://jedison.tistory.com

-----------------------------------------------------------------------------
simple is the best, http://jedison.tistory.com

^_^의 이미지


튜닝을 해야되지요 mysql도 설정에 따라 성능 차이가 많이 납니다. ^^
----------------------------------------------------------------------
웃는 얼굴 헤죽 헤죽

----------------------------------------------------------------------
웃는 얼굴 헤죽 헤죽

paek의 이미지

MySQL 의 경우 적절한 튜닝에 따라 성능이 100% 심하면 1000% 까지 차이 나는경우도 있습니다.

절대 Default 옵션으로 쓰는걸 추천 하지 않습니다.

하드웨어 사양과 그리고 그에 맞은 i/O 옵션 등등 관과 해선 않될 문제가 많습니다.

--------------------------------------------------------
세상에서 나의 존재는 하나이다.
그러므로 세상에서 나는 특별한 존재이다.
-
책망과 비난은 변화가 아니다.
생각만으로 바뀌는것은 아무것도 없다.

--------------------------------------------------------

세상에서 나의 존재는 하나이다.
그러므로 세상에서 나는 특별한 존재이다.
-
책망과 비난은 변화가 아니다.
생각만으로 바뀌는것은 아무것도 없다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.