wp_postmeta의“_edit_lock”에 대한 간단한 업데이트가 왜 그렇게 느립니까?


11

MySQL 느린 쿼리 로그에서 누적 적으로 가장 느린 쿼리는 wp_postmeta에 대한 간단한 업데이트입니다. 예를 들면 다음과 같습니다.

UPDATE `wp_postmeta`
  SET `meta_value` = '1392835505:386'
  WHERE `post_id` = 94705 AND `meta_key` = '_edit_lock';

설정에 대한 관련 세부 사항 :

  • MySQL 느린 쿼리 시간이 1로 설정 됨
  • wp_postmeta의 스토리지 엔진은 InnoDB입니다
  • 기본 WP 블로그 (이 느린 쿼리가 발생하는 곳)에 수만 개의 게시물이있는 대규모 멀티 사이트 설치 내에서 실행
  • WP 관리 영역에서의 활발한 활동
  • WP의 공개 활동에 대한 활동이 적음
  • 느린 쿼리는 모두 "_edit_lock"키를 사용하는 것 같습니다. "_edit_lock"이외의 키를 사용하는 동일한 형식의 쿼리는 느리지 않습니다.

이것이 시스템에서 가장 느린 쿼리 인 이유는 무엇입니까? WP의 "편집 잠금"을 특정 적으로 사용하는 것과 관련이 있습니까?

감사! :)


업데이트 : 아래 mysqlsla의 출력 :

______________________________________________________________________ 001 ___
Count         : 606  (16.83%)
Time          : 2257.760468 s total, 3.725677 s avg, 1.00512 s to 84.645869 s max  (20.60%)
  95% of Time : 1355.289277 s total, 2.357025 s avg, 1.00512 s to 12.343604 s max
Lock Time (s) : 182.502 ms total, 301 μs avg, 29 μs to 157.542 ms max  (0.21%)
  95% of Lock : 22.882 ms total, 40 μs avg, 29 μs to 57 μs max
Rows sent     : 0 avg, 0 to 0 max  (0.00%)
Rows examined : 1 avg, 1 to 2 max  (0.00%)
Database      : xxx_wp
Users         :
        xxx_wp@localhost  : 98.84% (599) of query, 51.03% (1837) of all users
        yyy_wp@localhost  : 1.16% (7) of query, 0.94% (34) of all users

Query abstract:
SET timestamp=N; UPDATE wp_postmeta SET meta_value = 'S' WHERE post_id = N AND meta_key = 'S';

Query sample:
SET timestamp=1392835506;
UPDATE `wp_postmeta` SET `meta_value` = '1392835505:386' WHERE `post_id` = 94705 AND `meta_key` = '_edit_lock';

얼마나 많은 결과를 얻습니까 SELECT * FROM wp_postmeta WHERE meta_key='_edit_lock'? ?
adrian7

질문 주셔서 감사합니다, adrian7! 검색어와 일치하는 33k 개의 행이 있습니다. WP의 '_edit_lock'메타 키 사용법에 익숙하지 않습니다. 이것이 비정상입니까?
rinogo

그것은 비정상적이지 않습니다. 워드 프레스는 사용자가 동일한 게시물 / 페이지를 편집하려고 할 때이를 경고합니다. wp_postmeta에서 모든 _edit_locks를 삭제하는 것이 좋습니다. 분명히 편집이 하나도없고 성능이 개선 된 후에 확인하십시오. (BTW가 먼저 백업합니다).
adrian7

3
SELECT이 항목 만 입력 하면 시간이 많이 걸리 나요? 마찬가지로 SELECT * FROM wp_postmeta` WHERE post_id= 94705과 meta_key`= '_edit_lock'?
fischi

@ fischi : 그 쿼리는 적어도 몇 분 전에 한 테스트에서 45-50ms에서 걸리는 것 같습니다. 그러나 때로는 시간이 오래 걸릴 수 있습니다 (예 : 질문에 포함 된 mysqlsla 출력에 표시된 것처럼 최대 84 초). 최근의 구성 변경 사항이 쿼리에 영향을 미치는지 확인하기 위해 새로운 느린 쿼리 분석 라운드를 실행합니다.
rinogo

답변:


3

게시물 또는 페이지를 편집 할 때마다 _edit_lock이 생성됩니다. 타임 코드와 사용자로 구성됩니다. 워드 프레스는 현재 누가 편집하고 있는지 알고 있습니다.

meta_id     post_id     meta_key    meta_value
9           5           _edit_lock  1388386997:1

당신이 그것을 조작하면 WordPress는 어떻게 든 민감하게 반응합니다 ... 누군가 게시물에서 몇 초 동안 일했는지 가져 왔습니다. 항상 내 데이터베이스 로딩 시간이 끊어졌습니다.

당신이 말했듯이 큰 다중 사이트에서 이것을 실행합니다. 얼마나 많은 사용자가 게시물을 작성하는지 모르지만 많은 사람들이 동시에 게시물을 편집하면 서버의 RAM을 손상시킬 수 있습니다.

해결책은 다음과 같습니다. _edit_lock 제거

"포스트 잠금 / 편집 잠금"을 비활성화하는 방법은 무엇입니까?

일반적으로 WordPress에는 게시물 당 "_edit_lock"이 있어야합니다. 일부 데이터베이스는 매번 생성하는 데 문제가 있습니다.

이 남자처럼 http://wordpress.org/support/topic/can-i-remove-_edit_lock-_edit_last-from-wp_postmeta

그의 해결책은 그것들을 모두 삭제하는 것이 었습니다. 속도를 높이려면 phpMyAdmin에서 매일 밤 3시에 삭제하십시오.

DELETE FROM `yourdb`.`wp_postmeta` WHERE `wp_postmeta`.`meta_key` = '_edit_lock'

크론 작업이 정확하게 수행되는지 확인할 수 있습니다.


0

이 시도 :)

UPDATE `wp_postmeta` 
    SET `meta_value` = concat(unix_timestamp(),':386')  
    WHERE `post_id`  = 94705 
      AND `meta_key` = '_edit_lock';
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.