MySQL 쿼리 캐시에 대한 기본 사항
소개하다.
MySQL 데이터베이스 관리자, 심지어 데이터베이스에 정통한 개발자의 생활 속에서 조회는 어디에나 있다.우리가 이전의 몇몇 블로그 글에서 말한 바와 같이, 조회는 단지 비교적 작은 임무로 구성된 임무일 뿐이다.그것들의 성능을 최적화하기 위해서, 우리는 작은 임무들을 더욱 빨리 집행하거나 아예 집행하지 않도록 해야 한다.우선, MySQL이 어떻게 조회를 실행하는지 확인해야 합니다.우리는 이미 토론the basics of what makes queries slow in MySQL한 적이 있다. 우리는 우리의 조회를 분석해야 한다. 조회 캐시는MySQL이 가장 먼저 고려하는 일 중의 하나이다. 기억나?
쿼리 캐시란?
MySQL 조회 캐시는 MySQL 5.7에서 버려졌지만 (8.0에서 삭제) 이전에 메모리에서 실행된 문장을 저장한다. 다시 말하면 조회 캐시는 보통 데이터베이스 메모리에 저장
SELECT
된 문장이다.따라서, 만약 우리가 검색을 실행한 후에 일정 시간 후에 완전히 같은 검색을 다시 실행한다면, 결과는 디스크에서 검색하는 것이 아니라 메모리에서 검색하기 때문에 더욱 빨리 되돌아올 것이다.
쿼리 캐시 쿼리와 결과 집합입니다.따라서, 우리가 같은 검색을 실행할 때, 검색 캐시의 결과는 즉시 되돌아옵니다.쿼리 캐시 크기는 시스템 변수 설정
query_cache_size
을 통해 조절할 수 있지만, 경고가 있습니다. 쿼리 캐시를 사용하려면, 반드시, 반드시 같아야 하며, 한 바이트가 한 바이트와 연결되어야 합니다.즉, 두 질의가 완전히 동일한 방식으로 캐시되어야 한다고 생각하더라도
SELECT * FROM demo_table WHERE column = ‘Demo’;
select * from demo_table where column = ‘Demo’;
사실은 그렇지 않다.MySQL 쿼리 캐시가 모든 쿼리를 동일하게 요구하고, 한 바이트 차이라도 결과를 되돌려주지 않기 때문이 아니다.
따라서 한마디로 MySQL이 문장을 실행할 때 가장 먼저 해야 할 일 중 하나는 쿼리 캐시가 활성화되었는지 확인하는 것이다. (리셋이 필요하면 느린 MySQL 쿼리에 관한 블로그로 돌아가십시오.)쿼리 캐시가 설정된 경우 MySQL은 먼저 쿼리와 관련된 모든 일치를 확인합니다.일치하는 항목이 없으면 MySQL은 다음 단계를 계속합니다.그러나 동일한 일치 항목이 있으면 MySQL은 쿼리 캐시에서 결과를 반환합니다.
MySQL 쿼리 캐시에서
일치하는 항목을 되돌리기 전에 MySQL 조회 캐시에서 MySQL 확인을 요구합니다. 이 사용자가 이런 작업을 완성하는 데 필요한 권한이 있습니까?조회 실행을 거절해야 합니까?
MySQL 검사의 사용 권한 목록은 다음과 같습니다.
특권.
간략한 설명
ALL
특정 MySQL 사용자에게 모든 권한을 제공합니다.SELECT
특정 MySQL 사용자에게 지정된 데이터베이스에서 행을 선택할 수 있는 권한을 부여합니다.UPDATE
특정 MySQL 사용자에게 지정된 테이블에 있는 기존 행을 업데이트할 수 있는 권한을 제공합니다.SHOW DATABASES
특정한 MySQL 사용자가 특정한 MySQL 실례에 존재하는 모든 MySQL 데이터베이스 목록을 얻을 수 있도록 합니다.USAGE
사용자가 MySQL만 사용할 수 있도록 하는 것은 사용자가 MySQL에서 어떤 조회도 실행할 수 없다는 것을 의미한다.본질적으로 특권이 없는 동의어다.더 많은 특권이 있지만, 알겠습니다.MySQL은 테이블과 관련된 정보를 캐시된 조회와 함께 저장하기 때문에 특권은 조회 캐시에 매우 중요하다.MySQL 결과 검사 프로세스의 첫 단계이므로 특권도 중요합니다.다음은 모든 일의 작업 원리이다.
우선 순위별 정렬
MySQL 상태
해석하다
1
MySQL에서 쿼리 캐시에서 사용 권한을 확인하고 있습니다.
먼저 MySQL은 특정 사용자가 특정 결과에 액세스할 수 있는지 확인합니다.
2
MySQL은 쿼리 캐시에서 쿼리 자체를 검사하고 있습니다.
그런 다음 MySQL은 쿼리 캐시에 동일한 쿼리가 있는지 확인하기 시작합니다.일치하는 항목이 있으면 MySQL이 반환됩니다.없으면 MySQL이 다음 단계로 넘어갑니다.
셋
MySQL은 쿼리 캐시의 스트라이프 대상을 유효하지 않은 것으로 기록하고 있습니다.
테이블이 변경됨에 따라 조회 캐시를 업데이트해야 합니다.따라서 이 단계에서 MySQL은 조회 캐시에 있는 항목의 대상을 무효로 기록하기로 결정합니다.
4
결과를 보내다.
MySQL은 캐시 결과를 보내고 표시합니다.
5
결과를 캐시에 저장합니다.
MySQL은 질의 결과를 질의 캐시에 저장합니다.
6
질의 캐시가 잠겼습니다.
캐시 프로세스가 끝났습니다. MySQL 잠금 조회 캐시입니다.
"캐시가 없습니다!"":쿼리 캐시가 손상되었습니까?
함수나 구역을 사용할 때, 만약 우리가 검색에서 어떤 변수를 사용한다면, 검색 캐시도 유효하지 않을 것이다.예를 들어 우리가
SELECT ... INTO OUTFILE
를 사용하여 빅데이터 집합을 MySQL에 불러오면 결과는 캐시되지 않는다.일반적으로 SELECT ... [LOCK | FOR | INTO]
와 같은 검색을 사용할 때 검색 캐시가 작동하지 않는다. 만약에 우리가 열에서 NULL
값과 AUTO_INCREMENT
값을 검사한다면 이것은 우리가 하나의 열increment
에 AUTO_INCREMENT
값이 있고 이런 검색을 실행하면 검색 캐시도 사용할 수 없다는 것을 의미한다.
SELECT * FROM demo_table WHERE increment IS NULL;
조회 캐시도 효력이 발생하지 않습니다.
이 모든 기능들은 당신들 중 일부로 하여금 "일을 안 해요!"라고 외치게 할 수 있다. -네 말이 맞다.쿼리 캐시가 항상 적용되는 것은 아닙니다. MySQL의 모든 내용과 마찬가지로 한계가 있습니다.상기 상황을 제외하고, 문장 생성 경고나 문장이
TEMPORARY
저장 엔진이 있는 테이블에서 실행될 때, 그리고 기타 특수한 상황에서는 작업을 거부할 수 있다.누군가가 테이블에 어떤 내용을 쓸 때마다, 조회 캐시도 비워집니다.
조회 캐시 기능은
query_cache_size
매개 변수에 달려 있다.이 파라미터는 크면 클수록 좋지만, 이 파라미터는 어느 정도에 당신의 기억에 달려 있다는 것을 주의하십시오.기본적으로 쿼리 캐시의 기본 구조는 최소 40kB의 저장 공간이 필요하며 기본값은 1MB에서 16MB 사이일 수 있음을 기억하십시오.그러나 만약 데이터베이스가 데이터를 읽느라 바쁘다면, 더 큰 값은 최선의 해결 방안을 찾는 데 도움이 될 것입니다. 다시 실험을 해야 합니다.
실행
RESET QUERY CACHE
문장을 통해 검색 캐시에 있는 모든 내용을 삭제할 수 있습니다.FLUSH TABLES
라는 문장을 사용하면 모든 값이 검색 캐시에서 삭제됩니다.
MySQL은 쿼리를 실행하여 쿼리 캐시에 저장된 쿼리 수를 확인할 수도 있습니다.
SHOW STATUS LIKE 'Qcache_queries_in_cache%';
당신은 다음과 같은 결과를 얻어야 합니다.
+-------------------------+--------+
| Variable_name | Value |
+-------------------------+--------+
| Qcache_queries_in_cache | 1 |
+-------------------------+--------+
이 예에서, 우리는 우리의 검색 캐시가 현재 캐시된 결과를 볼 수 있다.
FLUSH TABLES
라는 문장을 실행하면 모든 값이 사라집니다.마법
요약
MySQL에서 조회 캐시는 매우 강력한 야수이다.그것은 디스크가 아닌 메모리에서 여러 가지 값을 저장해서 조회 실행 시간을 가속화할 수 있다.그러나 결함이 없는 것은 아니다.검색 캐시에 제한이 있지만, 자신이 무엇을 하고 있는지 알면 문제가 없을 것입니다.
쿼리 캐시
SELECT
쿼리에서 가장 유용합니다. 이를 위해 다른 쿼리 blog posts 를 보십시오.우리는 이미 토론한 적이 있다. 심지어는.
루카스는 도덕적 해커로 MySQL 데이터베이스 관리자로 회의에서 자주 발언한다.2014년 이후 르카스는 리투아니아 국내외 방문량이 가장 많은 일부 사이트의 안전 결함을 발견하고 책임감 있게 공개했다. 이는 광고, 선물 구매, 게임, 위탁 관리 사이트와 정부 기구의 일부 사이트를 포함한다.르카스는 세계에서 가장 크고 가장 빠른 데이터 유출 검색엔진 중 하나를 운영하고 있다 - 디렉토리를 엽니다.com과 자주 여러 곳에서 블로그를 발표하여 정보 안전과 다른 주제를 소개한다.그는 또 르카스빌리키스에 자신의 블로그를 개설했다.일반 도메인 이름 형식
Reference
이 문제에 관하여(MySQL 쿼리 캐시에 대한 기본 사항), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/arctype/the-basics-of-mysql-query-caching-35p2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)