Programing

WordPress 설치의 wp_options 테이블에서 과도 현상을 제거 할 수 있습니까?

lottogame 2020. 12. 29. 06:39
반응형

WordPress 설치의 wp_options 테이블에서 과도 현상을 제거 할 수 있습니까?


최근에 내 wp_options테이블이 약간 큰 것 같습니다. 1161 개의 행을 포함하며 크기는 약 2.1MB입니다.

Clean Options를 설치했습니다 . 2010 년에 플러그인에서 개발이 중단 된 것처럼 보이지만 여전히 작동합니다.

이제 잠재적으로 고아 항목의 긴 목록이 있습니다. 이를 분류하고 제거 할 항목과 보관할 항목을 쉽게 파악할 수있는 방법이 있습니까? 또한 이것이 웹 사이트의 성능 문제를 유발할 수 있습니까?

읽어 주셔서 감사합니다. 어떤 아이디어라도 환영합니다!

업데이트 : Clean Options 플러그인은 목록에 몇 가지 일시적인 파일을 반환하여 wp_options테이블 에 수백 개의 일시적인 파일이 있음을 알게되었습니다 . 다음과 같은 전체 무리가 있습니다.

  • _site_transient_browser_5728a0f1503de54634b3716638...
  • _site_transient_timeout_browser_03df11ec4fda7630a5...
  • _transient_feed_83dcaee0f69f63186d51bf9a4...
  • _transient_plugin_slugs
  • _transient_timeout_feed_83dcaee0f69f63186d51bf9a4b...

등등. 내가 말했듯이, 이와 같이 보이는 수백 개의 행이 있습니다. 그냥 버리는 것이 안전합니까?

감사


안전하게 버릴 수 있습니다. Wordpress 및 일부 플러그인은 필요에 따라 과도 신호를 다시 생성합니다. 과도 상태는 복잡한 쿼리에서 저장된 값과 비슷합니다. 결과는 임시로 저장되므로 시스템이 공통 쿼리를 반복해서 수행 할 필요가 없으며 대신 존재하고 만료되지 않은 경우 임시로만 찾습니다. 물론, 뭔가 잘못되지 않도록 변경하기 전에 데이터베이스를 백업하십시오!

모든 것을 백업 한 후 다음과 같은 mysql 문을 실행할 수 있습니다.

DELETE FROM `wp_options` WHERE `option_name` LIKE ('%\_transient\_%')

[ 편집 : 주석 제안 후 이스케이프 문자로 수정 된 문]


과도 상태는 다시 생성 될 때 삭제할 수 있습니다. 일부 플러그인의 실패 상황이나 설계 문제로 인해 만료 된 과도 상태가 누적 될 수 있습니다. 이에 대처하는 한 가지 방법은 만료 된 과도 전류를 제거하면서 현재의 과도 전류가 기능을 수행하도록하는 것입니다. 며칠 동안 만료 된 과도 상태 만 제거하면 어떤 플러그인이 부실 과도 상태를 유발하는지 모니터링하고 문제를 해결하거나 문제를보고하기위한 조치를 취할 수 있습니다.

다음은 데이터베이스에서 wp * option 테이블을 찾고 1 주일 이상 오래된 5 개의 가장 큰 임시 옵션을 삭제합니다. 이것은 플러그인이 스스로 제거 할 옵션을 삭제할 수있는 시간을 제공합니다.

#!/bin/bash

DBNAME="mydatabase"
DBUSER="${USER}"
DBPASSWD="secret"
MYSQLBIN=/usr/bin/mysql # OR MYSQLBIN=/usr/local/mysql/bin/mysql
MYSQL="${MYSQLBIN} -s -D ${DBNAME} -u ${DBUSER} -p${DBPASSWD}"
TMP=/var/tmp/
ENTRIES_FILE="${TMP}entries.$$"

# Find option tables
for OPTION_TABLE in $( echo 'show tables like "%wp%options";' | ${MYSQL} )
do
    # Find up to five large long expired transients
    ${MYSQL} > ${ENTRIES_FILE} <<EOF
    select option_name from ${OPTION_TABLE} where option_name in
        (select concat("_transient",substr(option_name,19))
            FROM ${OPTION_TABLE} WHERE option_name LIKE '_transient_timeout%' AND
            option_value < UTC_TIMESTAMP() - INTERVAL 1 WEEK order by option_value)
    order by length(option_value) desc limit 5;
EOF
    for OPTION in $( < ${ENTRIES_FILE} )
    do
        echo Deleting ${OPTION} from ${OPTION_TABLE}
        echo delete from ${OPTION_TABLE} where option_name = \"${OPTION}\"\; | ${MYSQL}
        if [[ $? -eq 0 ]]; then
            echo delete from ${OPTION_TABLE} where option_name = \"_transient_timeout${OPTION:10}\"\; | ${MYSQL}
        fi
    done
done
rm -f ${ENTRIES_FILE}

Install the plugin Delete Expired Transients to automatically clean up the database on a daily basis.

ReferenceURL : https://stackoverflow.com/questions/10422574/can-i-remove-transients-in-the-wp-options-table-of-my-wordpress-install

반응형