저는 Google PageSpeed Insights를 사용하여 웹 사이트의 성능을 분석해 왔습니다.보고하는 주된 문제는 평균 서버 응답 시간이 1.5-2 초 정도 인 것입니다. Google은 200ms를 달성 할 것을 권하고 있습니다.느린 페이지 속도를 야기하는 중간 텍스트를 사용하여 성능 문제가 발생했습니다.
데이터베이스에서 데이터를 검색하는 쿼리가 성능상의 심각한 문제를 일으키는 것으로 밝혀졌습니다. 내 웹 사이트는 캐싱을 광범위하게 사용하여 웹 사이트의 섹션을 검색합니다. 전체 웹 페이지는 일반적으로 캐시 테이블에서 5 개의 데이터베이스 쿼리로 생성 할 수 있습니다.
내가 하드 코딩이 내 반환 값은 (주 선택 '이 테스트입니다') 때 :
$sql = "SELECT 'This is a test'
FROM cache
WHERE url = ?
AND language = ?
AND currency = ?";
$stmt = $conn->prepare($sql);
if (!$stmt) {
ThrowDBError($conn, $stmt, $sql);
}
$stmt->bind_param('sss', $url, $language, $currency);
if (!$stmt->execute()) {
ThrowDBError($conn, $stmt, $sql);
}
$stmt->bind_result($cache);
$stmt->fetch();
$stmt->close();
서버 응답 속도가 0.5 초에 떨어진다. - 웹 사이트가 캐시 테이블을 만드는 쿼리 5에 대한 이초
$sql = "SELECT page_body
FROM cache_copy
WHERE url = ?
AND language = ?
AND currency = ?";
$stmt = $conn->prepare($sql);
if (!$stmt) {
ThrowDBError($conn, $stmt, $sql);
}
$stmt->bind_param('sss', $url, $language, $currency);
if (!$stmt->execute()) {
ThrowDBError($conn, $stmt, $sql);
}
$stmt->bind_result($cache);
$stmt->fetch();
$stmt->close();
서버 응답 시간이 1.5 일관 점프 :이 같은 실제 데이터 열 page_body을 선택하는 데 다시 넣어합니다.
캐시 테이블에는 8,000 개의 행만 포함되어 있으며 올바르게 색인을 생성했다고 생각합니다. page_body 열은 중간 텍스트입니다. 중간 텍스트를 사용하여 성능 관련 문제를 아는 사람이 있습니까? 로드 시간에 1.5 초를 추가하는 이유를 모르겠습니다.
CREATE TABLE `cache` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`url` varchar(255) NOT NULL,
`language` varchar(2) NOT NULL,
`currency` varchar(3) NOT NULL,
`page_body` mediumtext NOT NULL,
`cached_time` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `url, language, currency` (`url`,`language`,`currency`) USING BTREE,
KEY `cached_time` (`cached_time`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
어떤 아이디어 : 여기
캐시 테이블에 대한 DDL입니까? 많은 감사합니다
5 개의 쿼리를 실행하여 1 페이지를 생성해야한다면이 길게 걸리는 것이 합리적입니다. 코드에는 아무 문제가 없지만 캐싱에 대한 잘못된 접근 방법이 사용됩니다. 내 경험에 의하면 캐싱은 웹 서버에서 수행되며 클라이언트간에 공유 .. DB 쪽보기에서 자동으로 쿼리를 캐시하는 데 사용됩니다 .. 가끔은 당신이 웹 서버에 높은 CPU를 볼로드 ballancer를 사용해야합니다 .. 최적화는 프런트 엔드 js/CSS/이미지 브라우저 gzip을 통해입니다 압축 및 캐싱 .. 또한 확인해보십시오 https://stackoverflow.com/a/7875699/3254405 – numbtongue
답장을 보내 주셔서 감사합니다. 내 OP에서 하드 코딩 된 텍스트 ('This is a test')를 반환하는 5 개의 쿼리를 테스트했으며 응답 시간과 아무런 차이가 없었습니다. 이 문제는 쿼리 자체를 수행하는 오버 헤드가 아닌 실제 데이터를 반환하는 것으로 보입니다. 이 문제는 테이블에서 '실제'데이터를 가져 오는 것 같습니다. – BigMeaty
추가 테스트로서 리뷰 주석에 varchar (1000)를 사용하는 리뷰를 저장하는 데 사용 된 테이블을 복제했습니다. 중복 테이블에서 유형을 중간 텍스트로 변경합니다. varchar로 빠른 응답, 중간 텍스트로 느리게. 문제는 확실히 데이터 유형으로 mediumtext를 사용하는 것으로 보입니다. – BigMeaty