2012-05-02 28 views
43

Gần đây tôi đã nhận thấy rằng bảng wp_options của tôi có vẻ hơi lớn. Nó chứa 1161 hàng và có kích thước khoảng 2,1MB.Tôi có thể xóa các transients trong bảng wp_options của cài đặt WordPress của mình không?

Tôi đã cài đặt Clean Options. Có vẻ như sự phát triển đã dừng lại trên plugin vào năm 2010, nhưng nó vẫn thực hiện công việc.

Tôi hiện có một danh sách dài các mục có thể bị mồ côi. Có một cách dễ dàng để đi về phân loại này, và tìm ra mà để loại bỏ và để giữ? Ngoài ra, điều này có thể chịu trách nhiệm gây ra các vấn đề về hiệu suất với trang web không?

Cảm ơn bạn đã đọc, mọi ý tưởng đều được hoan nghênh!

Cập nhật: Plugin Tùy chọn sạch trả về một số transients trong danh sách, dẫn tôi tìm thấy có hàng trăm tệp tạm thời trong bảng wp_options. Có một bó toàn trông giống như:

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

và vân vân. Như tôi đã nói, có hàng trăm hàng trông như thế này. Có an toàn để chỉ đổ chúng?

Cảm ơn

+0

Có thể chúng tôi có thể bắt đầu danh sách các plugin không hợp lệ để đính kèm với câu hỏi này? Plugins được biết đến với lũ lụt wp_options. Đầu tiên cho danh sách, plugin "Flare", bổ sung thêm các biểu tượng chia sẻ truyền thông xã hội.Các mục trông như thế này "_transient_flare" Chỉ cần xóa 353611 hàng (1 Gig) của rác này, từ một blog, đã lấp đầy bộ nhớ cache InnoDB. –

Trả lời

114

Bạn có thể kết xuất chúng một cách an toàn. Wordpress và một số plugin sẽ tạo lại các transients nếu cần. Một thoáng qua là nhiều hơn hoặc ít hơn giá trị được lưu trữ từ một truy vấn phức tạp. Kết quả được lưu dưới dạng tạm thời để hệ thống không phải thực hiện truy vấn thông thường lặp đi lặp lại, thay vào đó nó chỉ tìm kiếm tạm thời nếu nó tồn tại và chưa hết hạn. Tất nhiên, tạo một bản sao lưu cơ sở dữ liệu của bạn trước khi thực hiện một thay đổi vì sợ rằng điều gì đó sai!

Sau khi sao lưu tất cả mọi thứ lên, bạn có thể chạy một tuyên bố mysql như thế này:

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

[EDIT: tuyên bố cố định với các nhân vật thoát, sau khi bình luận gợi ý]

+15

''% \ _ thoáng qua \ _%''. Đừng quên rằng một '_' là một ký tự đơn [ký tự đại diện] (http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html). –

+3

Tôi sẽ tăng gấp ba lần bình chọn câu trả lời này nếu tôi có thể - cảm ơn bạn! –

+0

Tôi đã thêm 'AND option_value <{$ time};' để chắc chắn rằng tôi đã xóa các transients cũ. – Mohit

1

Bạn có thể xóa transients như họ sẽ được tạo lại. Có thể có quá trình xây dựng các ứng dụng đã hết hạn do các tình huống lỗi hoặc các vấn đề về thiết kế với một số plugin. Một cách để đối phó với điều này là để loại bỏ các transients hết hạn trong khi cho phép những cái hiện tại thực hiện chức năng của chúng. Chỉ loại bỏ các transients đã hết hạn trong vài ngày cho bạn cơ hội giám sát các plugin nào gây ra các chuyển đổi cũ và thực hiện bất kỳ hành động nào để khắc phục sự cố hoặc báo cáo sự cố.

Sau đây sẽ tìm thấy bất kỳ bảng tùy chọn wp * nào trong cơ sở dữ liệu và xóa năm tùy chọn tạm thời lớn nhất có hơn một tuần cũ. Điều này cung cấp đủ lâu cho bất kỳ plugin nào để xóa các tùy chọn mà chúng sẽ tự tinh lọc.

#!/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} 
Các vấn đề liên quan