Software

mysql Key_buffer_size 매개 변수 최적화 설정

컨텐츠 정보

  • 1,284 조회

본문

먼저 document 가 이 매개 변수 에 대한 설명 을 살 펴 보 겠 습 니 다.
캐 시 my isam 표 의 색인 블록 크기 는 모든 프로 세 스 가 공유 할 수 있 습 니 다.설정 키buffer_size,운영 체제 에서 키 를 바로 분배 하지 않 습 니 다buffer_size 설정 값 이 아니 라 필요 할 때 재분배 합 니 다.키 여러 개 설정 가능buffer,설정 이 기본 key 가 아 닐 때buffer 가 0 일 때 my sql 은 캐 시 된 색인 블록 을 기본 key 로 이동 합 니 다.buffer 에서 더 이상 사용 하지 않 는 색인 블록 을 삭제 합 니 다.Myisam 표 에는 cache 색인 블록 만 있 을 수 있 고 cache 데이터 블록 은 없습니다.
원본 설명:
Index blocks for MyISAM tables are buffered and are shared by all threads. key_buffer_size is the size of the buffer used for index blocks. The key buffer is also known as the key cache.
The maximum allowable setting for key_buffer_size is 4GB on 32-bit platforms. As of MySQL 5.0.52, values larger than 4GB are allowed for 64-bit platforms (except 64-bit Windows, for which large values are truncated to 4GB with a warning). The effective maximum size might be less, depending on your available physical RAM and per-process RAM limits imposed by your operating system or hardware platform. The value of this variable indicates the amount of memory requested. Internally, the server allocates as much memory as possible up to this amount, but the actual allocation might be less.
Increase the value to get better index handling (for all reads and multiple writes) to as much as you can afford. Using a value that is 25% of total memory on a machine that mainly runs MySQL is quite common. However, if you make the value too large (for example, more than 50% of your total memory) your system might start to page and become extremely slow. MySQL relies on the operating system to perform file system caching for data reads, so you must leave some room for the file system cache. Consider also the memory requirements of other storage engines.
1.캐 시 인덱스 만 들 기:
mysql> set global key_buffer_1.key_buffer_size=8384512;
Query OK, 0 rows affected (0.01 sec)
mysql> set global key_buffer_2.key_buffer_size=8384512;
Query OK, 0 rows affected (0.01 sec)
2.키 버퍼 에 지정 표를 넣 습 니 다.
mysql> cache index t1,t2 in key_buffer_1;
+――――+――――――C+―――-+―――-+
| Table | Op | Msg_type | Msg_text |
+――――+――――――C+―――-+―――-+
| luoxuan.t1 | assign_to_keycache | status | OK |
| luoxuan.t2 | assign_to_keycache | status | OK |
+――――+――――――C+―――-+―――-+
2 rows in set (0.00 sec)
3.미리 표 의 색인 블록 을 불 러 옵 니 다.
mysql> load index into cache t1,t2;
+――――+――――C+―――-+―――-+
| Table | Op | Msg_type | Msg_text |
+――――+――――C+―――-+―――-+
| luoxuan.t1 | preload_keys | status | OK |
| luoxuan.t2 | preload_keys | status | OK |
+――――+――――C+―――-+―――-+
2 rows in set (0.00 sec)
적중률 및 key buffer 의 사용률 을 계산 하면
Cache 적중률:
100 C ( (Key_reads * 100) / Key_read_requests )
Key buffer 사용률
100 C ( (Key_blocks_unused * key_cache_block_size) * 100 / key_buffer_size)my sql 데이터베이스 에서 my sql keybuffer_size 는 MyISAM 표 의 성능 에 가장 큰 영향 을 미 치 는 매개 변수 입 니 다.다음은 mysql Keybuffer_size 매개 변수의 설정 을 상세 하 게 소개 합 니 다.참고 하 시기 바 랍 니 다.
다음 MyISAM 을 주요 저장 엔진 서버 로 설정 합 니 다.
mysql> show variables like 'key_buffer_size';
+-----------------+------------+
| Variable_name | Value |
+-----------------+------------+
| key_buffer_size | 536870912 |
+-----------------+------------+
my sql key 에 512 MB 메모 리 를 할당 하 였 습 니 다.buffer_size,우리 키 다시 보 자buffer_size 사용 현황:
mysql> show global status like 'key_read%';
+------------------------+-------------+
| Variable_name | Value |
+------------------------+-------------+
| Key_read_requests | 27813678764 |
| Key_reads | 6798830 |
+------------------------+-------------+
모두 27813678764 개의 색인 읽 기 요청 이 있 습 니 다.6798830 개의 요청 이 메모리 에서 하 드 디스크 에서 색인 을 직접 읽 지 못 했 습 니 다.색인 이 명중 되 지 않 은 캐 시 확률 을 계산 합 니 다.
key_cache_miss_rate = Key_reads / Key_read_requests * 100%
예 를 들 어 위의 데이터,keycache_miss_rate 는 0.0244%이 고 4000 개의 색인 읽 기 요청 만 하 드 디스크 를 직접 읽 을 수 있 습 니 다.이미 BT 입 니 다.keycache_miss_rate 는 0.1%이하 가 좋 습 니 다(1000 개 요청 마다 하 드 디스크 를 직접 읽 습 니 다).만약 keycache_miss_rate 0.01%이하 면 keybuffer_size 분배 가 너무 많 으 면 적당히 줄 일 수 있 습 니 다.
MySQL 서버 는 key 도 제공 합 니 다.blocks_*인자:
mysql> show global status like 'key_blocks_u%';
+------------------------+-------------+
| Variable_name | Value |
+------------------------+-------------+
| Key_blocks_unused | 0 |
| Key_blocks_used | 413543 |
+------------------------+-------------+
Key_blocks_unused 는 사용 하지 않 은 캐 시 폴 더(blocks)수,Key 를 표시 합 니 다.blocks_used 는 이 서버 와 같은 가장 큰 Blocks 수 를 표시 합 니 다.모든 캐 시 를 사용 하거나 key 를 추가 합 니 다.buffer_size,과도 색인 이 든 캐 시 를 가득 채 웠 습 니 다.비교적 이상 적 인 설정:
Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% ≈ 80%
key_buffer_사이즈 설정 주의사항
1.단일 키buffer 의 크기 는 4G 를 초과 할 수 없습니다.4G 를 초과 하면 다음 3 개의 bug 를 만 날 수 있 습 니 다.
http://bugs.mysql.com/bug.php?id=29446
http://bugs.mysql.com/bug.php?id=29419
http://bugs.mysql.com/bug.php?id=5731
2.제안 keybuffer 는 물리 메모리 의 1/4(MyISAM 엔진 대상),심지어 물리 메모리 의 30%~40%로 설정 합 니 다.만약 keybuffer_size 설정 이 너무 크 면 시스템 이 자주 페이지 를 바 꾸 어 시스템 성능 을 떨 어 뜨 립 니 다.MySQL 은 운영 체제 의 캐 시 를 사용 하여 데 이 터 를 캐 시 하기 때문에 시스템 에 충분 한 메모 리 를 남 겨 야 합 니 다.색인 보다 데이터 가 훨씬 큰 경우 가 많다.
3.기계 성능 이 우수 하 다 면 키 여러 개 설정 가능buffer,각각 다른 keybuffer 캐 시 전문 색인
위 에 서 는'초보 자'에 게 만 있 을 뿐,우 리 는 key 를 더욱 깊이 최적화 할 수 있다.buffer_size,"show status"를 사용 하여"Key"보기read_requests, Key_reads, Key_write_requests 및 Keywrites",더 적합 한 애플 리 케 이 션 크기 로 조정,Keyreads/Key_read_requests 의 크기 는 정상 적 인 상황 에서 0.01 보다 작 아야 합 니 다.
참고 자료:
http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_key_buffer_size
mysql 의 key 최적화buffer_size
key_buffer_size
key_buffer_size 는 색인 버퍼 의 크기 를 지정 합 니 다.색인 처리 속도,특히 색인 읽 기 속 도 를 결정 합 니 다.상태 값 검사 통과 Keyread_requests 와 Keyreads,key 를 알 수 있 습 니 다.buffer_size 설정 이 합 리 적 입 니까?비례 keyreads /key_read_requests 는 가능 한 한 낮 춰 야 합 니 다.적어도 1:100,1:1000 이 좋 습 니 다.(상기 상태 값 은 SHOW STATUS LIKE'key 를 사용 할 수 있 습 니 다.read%'획득).
key_buffer_size 는 MyISAM 표 에 만 작용 합 니 다.MyISAM 표를 사용 하지 않 더 라 도 내부 의 임시 디스크 시트 는 MyISAM 시트 이 므 로 이 값 을 사용 해 야 합 니 다.상태 값 검사 created 사용 가능tmp_disk_tables 에서 자세 한 정 보 를 알 게 되 었 습 니 다.
1G 메모리 기기 의 경우 MyISAM 표를 사용 하지 않 으 면 권장 값 은 16M(8-64M)입 니 다.
성능 향상 제안:
1.만약 openedtables 가 너무 커서 my.cnf 의 tablecache 커 짐
2.만약 키reads 가 너무 크 면 my.cnf 에서 keybuffer_size 가 커 집 니 다.Key 사용 가능reads/Key_read_requests 캐 치 실패 율 계산
3.Handlerread_rnd 가 너무 크 면 당신 이 쓴 SQL 문 구 는 키 의 역할 을 발휘 하지 않 고 전체 표를 스 캔 해 야 합 니 다.
4.만약 Threadscreated 가 너무 크 면 my.cnf 중 thread 를 증가 시 켜 야 합 니 다.cache_size 의 값 입 니 다.Threadscreated/connections 계산 cache 적중률
5.Createdtmp_disk_tables 가 너무 크 면 my.cnf 중 tmp 를 증가 시 켜 야 합 니 다.table_크기 값,디스크 기반 임시 테이블 대신 메모리 기반 임시 테이블 사용 
MySQL 최적화 사례:keybuffer_size
key_buffer_size 는 MyISAM 표 의 성능 에 가장 큰 영향 을 미 치 는 매개 변수 입 니 다.다음은 MyISAM 을 주요 저장 엔진 서버 로 하 는 설정 입 니 다.
mysql> SHOW VARIABLES LIKE '%key_buffer_size%';
  
아래 보기 keybuffer_size 사용 현황:
mysql> SHOW GLOBAL STATUS LIKE '%key_read%';
+-------------------+-----------------+
| Variable_name     | Value           |
+-------------------+-----------------+
| Key_read_requests | 2454354135490   |
| Key_reads         | 23490           |
+-------------------+-----------------+
2 rows in set (0.00 sec)
모두 키read_requests 개 색인 요청,모두 Key 발생reads 차 물리 IO
Key_reads/Key_read_requests≈0.1%이하 가 좋 습 니 다.
대 비 를 통 해 내 메모리 에 64G 가 있 기 때문에 나 는 키 를...buffer_size 는 2048 M 으로 설정 되 어 있 습 니 다.많이 좋아 진 것 같 습 니 다.메모리 가 넘 치 는 상황 이 있 습 니까?문 제 를 해결 하 다.후속 상황 이 어 떻 습 니까?

[이 게시물은 Keiminem님에 의해 2024-05-07 01:39:01 Web Programming에서 이동 됨]

관련자료

댓글 0
등록된 댓글이 없습니다.
Member Rank