MySQL은 열린 파일의 수를 어떻게 계산합니까?

때때로 우리는 다음과 같은 오보 정보를 만날 수 있다.
.....
[ERROR] /usr/local/mysql/bin/mysqld: Can't open file: './yejr/access.frm' (errno: 24)
[ERROR] /usr/local/mysql/bin/mysqld: Can't open file: './yejr/accesslog.frm' (errno: 24)
......
[ERROR] Error in accept: Too many open files
....

알림 정보가 뚜렷하다. 파일을 여는 수가 상한에 이르렀기 때문에 상한선을 높이거나 일부 열린 테이블 파일 설명자를 풀어야 한다.
MySQL에서는 파일 설명자 제한이 있습니다.
1、 Server ,  mysqld                     ,         fs.file-maxulimit -n  MySQL     open-files-limit   ,         。         ,      。

2、  Server        , InnoDB     ,  InnoDB               innodb-open-files     。    ,        InnoDB       ,        ,       ,      。

따라서 제한 초과 프롬프트가 표시되면 다음 방법을 사용하여 상한을 높일 수 있습니다.
1、  ,         。  :  sysctl -w fs.file-max=3264018;

2、  ,                  。  :  ulimit -n 204800;

3、  ,    MySQL      :  open-files-limit、innodb-open-files、table-open-cache、table-definition-cache

앞의 두 개의 제한망에서 많은 상세한 설명을 찾을 수 있으니 저는 더 이상 말하지 않겠습니다. 중점적으로 MySQL과 관련된 네 가지 옵션을 말씀드리겠습니다.
    1、open-files-limit
이것은 mysqld 프로세스가 보유할 수 있는 최대 파일 수를 제한합니다. 이것은 한 동네의 총 스위치에 해당합니다. 일단 제한을 초과하면 동네의 모든 주민들이 정전됩니다.
5.6.7(포함) 이전에 기본값 0은 최대 OS 커널 제한과 관련이 있었다.
5.6.8(포함) 이후 기본값은 자동으로 계산되며 최대 OS 커널 한계와 관련이 있습니다.
5.6.8과 그 이후에 자동으로 계산된 몇 가지 제한 규칙은 어느 계산 결과가 가장 크면 어느 것을 상한선으로 하는지 나타낸다.
1) 10 + max_connections + (table_open_cache * 2)
2) max_connections * 5
3) open_files_limit value specified at startup, 5000 if none

    2、innodb-open-files
이노DB 엔진에서 시계 공간 파일이 가장 많이 열리는 수량을 제한하는 것은 자신의 집에 있는 어떤 회로 보험에 해당하며, 이 회로가 단락되면 다른 회로에 영향을 주지 않고 자동으로 스위치를 뛰어넘어 단로원을 제거한 후 다시 누르면 사용할 수 있다.
최저 20, 기본 400, ibdata*, ib 만 계산logfile*、*.ibd 등 세 가지 파일, 레드 로그는 계산하지 않습니다. 5.6 이후에는 undo log를 독립할 수 있습니다. 저는 아직 테스트를 하지 않았기 때문에 계산되지 않을 것입니다. 관심 있는 친구는 검증할 수 있습니다.
    3、table-definition-cache
이 캐치는 캐시에 사용됩니다.frm 파일, 이 옵션도 예시합니다.frm 파일은 최대 개수를 동시에 열 수 있습니다.
5.6.7 이전 기본값 400;
5.6.7 이후에는 자동으로 계산되고 최저는 400이며 자동 계산 공식은 400+(table-open-cache/2)이다.
InnoDB의 경우 이 옵션은 연성 제한일 뿐이며 제한을 초과하면 LRU 원칙에 따라 낡은 항목을 삭제하고 새로운 항목을 추가합니다.
이 밖에 innodb-open-files도 최대 열 수 있는 시계의 수량을 제어하고table-definition-cache와 모두 제한 작용을 하는데 그 중에서 비교적 큰 것을 기준으로 한다.설정 제한이 없으면, 기본값이 200이고, 비교적 크기 때문에,table-definition-cache를 상한선으로 선택합니다.
    4、table-open-cache
이 캐치는 각종 데이터 테이블 파일 설명서를 캐시하는 데 사용됩니다.
5.6.7 이전 기본값 400, 범위: 1–524288;
5.6.8–5.6.11, 기본값 2000, 범위: 1–524288;
5.6.12 이후 기본값 2000(자동 계산 가능), 범위: 1-524288.
보충 설명 1: 테이블 파일 설명자를 계산하는 방법에 대한 권장 사항:
table-open-cache는 보통 max-connections와 관계가 있으므로 max 로 설정하는 것을 권장합니다connections * N, N의 값은 모든 검색에서 모두 사용할 수 있는 시계의 수량이며 임시 시계가 생길 수도 있습니다.
보충 설명2: MySQL은 다음 몇 가지 상황에서 테이블cache에서 테이블을 삭제합니다.
1、table cache  ,           ;
2、table cache        table_open_cache    ,               ;

3、        ,     FLUSH TABLES,   mysqladmin flush-tables   mysqladmin refresh

추가 설명 3: MySQL은 다음과 같은 방법으로 table cache를 할당합니다.
1、            ,           ;

2、        ,   cache              ,table cache     ,     table cache        ,       。

미안하지만, 추측에 실패했습니다. 아래의 문장을 보시면 소용이 있습니까?
  • 2011년 7월 22일 - Heartbeat+DRBD+MySQL Replication 장애 처리
  • 2012년 12월 23일 - MySQL TPCH 테스트 도구 설명서
  • 2012년 2월 13일 - MySQL 고가용성 킬러의 MHA
  • 2008년 12월 29일 - mysql의 10060 및 10061 오류 원인
  • 2008년 10월 9일 - MySQL 데이터베이스 최적화 방법
  • 2012년 3월 26일 - mysqlhash 해독 추출권
  • 2010년 12월 14일 - DRBD+Heartbeat로 MySQL이 제공하는 서비스를 더욱 안정적으로 제공
  • 2009년 2월 25일 - 라이센스가 잘못된 이유
  • 2008년 12월 14일 - Mysql 시간 함수
  • 2014년 11월 7일 - [MySQL 최적화 사례] 시리즈 - 페이지 나누기 최적화
  • 좋은 웹페이지 즐겨찾기