database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 27803 게시물 읽기
No. 27803
제 글만 답글이 업어용~~ 달아주세용~
작성자
김군(redsboom)
작성일
2008-09-23 11:11
조회수
4,355

프로그렘에서
SELECT count(*) 절이 250개
update  문이 45개 정도 됩니다.
프로그램 돌리면 돌리는 순간 show processlist 확인해보면
한 쿼리당 1초 , 2초 정도씩 한줄 한줄 쿼리문을 실행하는걸 볼수 있습니다.

어떤경우에는 5분정도뒤에 페이지에 결과 값이 나옵니다.

문제는 "페이지를 찾을수 없습니다"라고 나오는 경우가 많다는거구요..

이렇게 되다 안되다 하는걸 php튜닝을 받아보라느는 말을 하시는 분도 계시구요,
슬로우쿼리 로그를 살펴보면 해당 쿼리에는 크게 문제 없습니다.

될때도 있고 안될때도 있는건 mysql 문제가 아닐런지해서 질문 합니다.

따뜻한 답변 부탁 드립니다.


리눅스 버전확인~
[root@happycall var]# vi  /etc/redhat-release

커널 버전 확인
[root@happycall happycall]# uname -a
Linux happycall.co.kr 2.6.9-78.0.1.EL #1 Tue Aug 5 10:49:42 EDT 2008 i686 i686 i386 GNU/Linux

mysql 버젼 확인
[root@happycall man]# /usr/local/mysql/bin/mysql -V
/usr/local/mysql/bin/mysql  Ver 12.22 Distrib 4.0.25, for pc-linux-gnu (i686)


프로그램 실행시 메모리 체크 값입니다.
[root@happycall ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           495        447         48          0         56        297
-/+ buffers/cache:         94        401
Swap:         1027          3       1024


# vi  /etc/my.cnf (mysql 설정파일 일부 입니다.)

[client]
#password       = your_password
port            = 3306
socket          = /tmp/mysql.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-locking
skip-name-resolve
key_buffer = 384M
max_connections = 1024
max_allowed_packet = 1M
table_cache = 1024
sort_buffer_size = 2M
read_buffer_size = 2M
myisam_sort_buffer_size = 64M
thread_cache = 8
query_cache_size = 32M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8

제가 볼때 아래 sleep 가 계속 증가하는게 문제가 아닐런지 해서요...
루트 접속후 확인결과 sleep이 계속 증가 하고 있네요..
mysql> show processlist;
+-------+-----------+-----------+-----------+---------+------+-------+------------------+
| Id    | User      | Host      | db        | Command | Time | State | Info             |
+-------+-----------+-----------+-----------+---------+------+-------+------------------+
| 10440 | root      | localhost | NULL      | Query   | 0    | NULL  | show processlist |
| 12628 | happycall | localhost | happycall | Sleep   | 1692 |       | NULL             |


그런데 happycall.co.kr.err 로그에는 별거 없는것 같은데요...

/usr/local/mysql/libexec/mysqld: ready for connections.
Version: '4.0.25-log'  socket: '/tmp/mysql.sock'  port: 3306  Source distribution
080919 17:28:40 /usr/local/mysql/libexec/mysqld: Normal shutdown

080919 17:28:41  InnoDB: Starting shutdown...
080919 17:28:43  InnoDB: Shutdown completed
080919 17:28:43 /usr/local/mysql/libexec/mysqld: Shutdown Complete

080919 17:28:43  mysqld ended

080919 17:29:31  mysqld started
080919 17:29:31  InnoDB: Started
/usr/local/mysql/libexec/mysqld: ready for connections.
Version: '4.0.25-log'  socket: '/tmp/mysql.sock'  port: 3306  Source distribution

이 글에 대한 댓글이 총 4건 있습니다.
yo`

 답변이 없는것은....모르는내용이거나 답변하기가 곤란한 경우겟죠...

흠...select count(*) 가 250개, update 가 45개...개당 1초씩 잡아도 295초 네요...

프로세스가 어떻게 돌아가는지 모르겟지만은....질문의 내용으로 보았을때는 웹에서 php 스크립트로 돌리시나봅니다. (php는 잘 모르니깐...패쓰)

어떻게 돌아가는지 감이 잡히질 않아서...흠냐....무슨업무의 로직인지는 모르겟습니다만...

일단 하나하나 sql문이 실행될때 로그를 남겨보심이 어떨까 합니다. 아니면 몇개정도 나누어서...

화면에 짧은 메세지라도 뿌려가면서 디버깅을 해보시죠...

team b(teamb)님이 2008-09-23 18:01에 작성한 댓글입니다.

40개 지역에 카운트를 세는 프로그램 입니다.
한테이블에 5만개 정도의 정보중
각 지역의 선택된 특성에 맞게 카운틀르 세서
한 화면에 보이게 하는 것입니다.

여러번 설정파일도 보고 수정하고 커널 업데이트도 하고
해보다 안되어서 글을 올려 보았습니다.

이젠 몇가지 포기 한 상태에서 해결하고 싶은부분은

mysql> show processlist;
+-------+-----------+-----------+-----------+---------+------+-------+------------------+
| Id    | User      | Host      | db        | Command | Time | State | Info             |
+-------+-----------+-----------+-----------+---------+------+-------+------------------+
| 10440 | root      | localhost | NULL      | Query   | 0    | NULL  | show processlist |
| 12628 | happycall | localhost | happycall | Sleep   | 1692 |       | NULL             |
 
위에처럼 sleep이 별 쿼리문 없이 자주 나오는게 맘에 들지도 않거니와,
안나오는게 그래도 좋은게 아닐까 싶은데... 해결방법은 없는지 답답하네요

보통 분들은 
[root@happycall bin]# vi /etc/my.cnf  에서 wait_time 값은 바꾸어 보았습니다.

쿼리문에서 mysql close 을 안해주었다 하시는 분들도 있는걸로 알고요...


김군(redsboom)님이 2008-09-24 10:04에 작성한 댓글입니다.

흠, 아무일도 하지 않고 빈둥빈둥 대는 sleep 프로세스가 없으면 좋긴 하죠. 접속을 끊으면 바로바로 사라져야 할것들인데...정확한 이유는 모르겟습니다만 가끔 잘 살아서 빈둥빈둥대는 놈들이 많습니다. -.ㅡ;;

흠, 비정상적으로 끊어진넘들이라든가 뭐..그런...넘들이 좀비처럼 남아 있기도 하고요...

wait_timeout 하고 interactive_time 하고 또 머더라..흠 기억이 가물가물 하네요 여튼 관련된것들의 값을 좀 줄이면 좀 줄기는 하더군요...

흠 그런데 한번 연결해서 작업한다음 끊어지는게 아니고 한번 퀴리 할때마다 붙었다 끊었다 하나요? 음...

5만레코드라면 많은 레코드는 아닌데..InnoDB사용하시는건가바요...InnoDB 를 좀더 튜닝을 해보시죠..

그리고 MySQL 을 업그레이드 할수 있다면 업글해서 뷰나 트리거를 사용해서 통계쿼리를 좀 바꿔보시는것도 괜찮을듯 한데요..

흠...뭐 그냥 주절주절 거려보았습니다.

team b(teamb)님이 2008-09-24 16:29에 작성한 댓글입니다.

댓글에 감사 드립니다.


InnoDB 맞습니다...


[ bin]# vi /etc/my.cnf

innodb_lock_wait_timeout = 50  <<  50 이하로 더 줄여 봐야 할까요?


아래 부분 처럼 설정을  조정 했는데요... 아무래도 서버에 특별한 문제인듯 생각 하기로 했습니다.

CPU에 문제 서버에 노화인듯 합니다.

서버 호스팅 담당자 통화결과  8년 넘게 교체 없이 사용한거면 오래됐다네요~



[mysqld]

port            = 3306

socket          = /tmp/mysql.sock

skip-locking

skip-name-resolve

key_buffer = 384M

max_connections = 1024

max_allowed_packet = 1M

table_cache = 1024

sort_buffer_size = 2M

read_buffer_size = 2M

myisam_sort_buffer_size = 64M

thread_cache = 8

query_cache_size = 32M

# Try number of CPU's*2 for thread_concurrency

thread_concurrency = 8

김군(redsboom)님이 2008-09-25 11:37에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
27809트랜잭션과 락킹 [1]
박종태
2008-09-25
3850
27808Grant로 권한설정 문의합니다...
Grant
2008-09-25
3930
27804오라클 쿼리 my-sql로 바꾸려고 하는데요. count(*) over()
이영주
2008-09-23
4359
27803제 글만 답글이 업어용~~ 달아주세용~ [4]
김군
2008-09-23
4355
27802테이블생성시 유효하지못한 디폴트값이란 오류 [1]
Bobster
2008-09-23
4320
27801용량이 부족해서... [1]
호기심
2008-09-22
3713
27800테이블 트리거 해제 및 연결상태확인 방법
호기심
2008-09-22
4078
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다