প্রশাসক: মূল মেটা ক্যোয়ারির কারণে খুব ধীর সম্পাদনা পৃষ্ঠা


11

কোনও পোস্ট বা পৃষ্ঠা সম্পাদনা করতে যাওয়ার সময় আমরা সত্যিই দীর্ঘ লোড বার লক্ষ্য করছি। ক্যারিয়ার মনিটরের ব্যবহার করে আমরা দেখতে পেলাম যে এই ডাব্লুপি কোরের কোয়েরিটি 15-20-এর দশকে উপরে চলেছে।

SELECT meta_key 
FROM wp_postmeta 
GROUP BY meta_key 
HAVING meta_key NOT LIKE '\\_%' 
ORDER BY meta_key 
LIMIT 30

caller: 
meta_form()
post_custom_meta_box()
do_meta_boxes()

আমাদের পোস্টের একটির মধ্যে প্রায় 20 বা ততোধিক কাস্টম ক্ষেত্র ব্যবহৃত হওয়ায় আমরা প্রচুর পোস্টমেটা ব্যবহার করি। আমি বলব যে আমরা পোস্টমেটার উপর অত্যধিক নির্ভর করি, তবে এটি পোস্টের আইডি নির্বাচন করে না এমনটি দেখে মনে হচ্ছে এটি খুব অসুবিধাজনক প্রশ্নের মতোই।

এটি কি সাধারণ সমস্যা? ফিল্টারটির মাধ্যমে এই ফাংশনটি অক্ষম করার কোনও উপায় আছে কি? যে কোনও ইনপুট জন্য ধন্যবাদ।


কোনও প্লাগইন এবং ডিফল্ট থিম ছাড়া এটি কি ঘটবে?
বার্জায়ার

হ্যাঁ এটা করে. উপরে উল্লিখিত হিসাবে, আমি ধীরে ধীরে ক্যোরিয়াকে ডব্লিউপি কোর সম্পর্কিত বলে চিহ্নিত করেছি। আমি যে উত্তরে সরবরাহ করেছি সেটিতে ফাংশনটি সহ, কাস্টম ফিল্ডস মেটা বাক্স অক্ষম করা আছে, যা কোয়েরিকে চলমান থেকে বাধা দেয়।
psorensen

2
আমি এটি জানি, আমি কেবল meta_form()ফাংশনটি পরীক্ষা করে দেখেছি এবং এটি হ'ল মূল ফাংশন থেকে উত্পন্ন এসকিউএল কোয়েরি। আপনি কোডটিতে পরিবর্তন করে আপনার নিজস্ব কাস্টম মেটাবক্স যুক্ত করার চেষ্টা করতে পারেন meta_form()এবং সেখানে আপনার প্রস্তাবিত এসকিউএল কোয়েরিটি ব্যবহার করতে পারেন। আমি এই # 8561 টি বন্ধ ট্র্যাকের টিকিট পেয়েছি । আপনি সম্ভবত অন্য একটি টিকিট তৈরি করতে পারেন বা এটি আবার খোলার চেষ্টা করতে পারেন? পিএস: লক্ষ্য করুন যে পিতামাতার পৃষ্ঠা নির্বাচন করা মেটাবক্সও সমস্যাযুক্ত। আপনি যদি 1 মিলিয়ন পৃষ্ঠা পেয়ে থাকেন, তবে সেগুলি সমস্তই নির্বাচিত বিকল্প হিসাবে প্রদর্শিত হবে!
বার্জায়ার

2
সিএসএস-ট্রিক্সে প্রস্তাবিত একটি সমাধান: css-tricks.com/…
psorensen

সেখানে আকর্ষণীয় সমাধান, তবে দেখে মনে হচ্ছে এটি পুরো meta_form()ফাংশনটি প্রতিস্থাপন করছে । আমি উত্তরটি আপডেট করেছি - মূল এসকিউএল কোয়েরিটি ডাব্লুপি সংস্করণ ৪.৩ এ সামঞ্জস্য করা হয়েছে .. আমাদের অতিরিক্ত post_idসীমাবদ্ধতার তুলনায় আপনি কি এই নতুন এসকিউএল কোয়েরি নিয়ে কোনও পারফরম্যান্স লাভ দেখতে পাচ্ছেন ?
বিরগিরে

উত্তর:


5

আপনি কীভাবে লোডিংয়ের সময়টিকে কীভাবে প্রভাবিত করে তা দেখতে আপনার কাস্টম এসকিউএল পরীক্ষা করতে চান, আপনি এই ক্যোয়ারী অদলবদল করে দেখতে পারেন:

/**
 * Restrict the potential slow query in the meta_form() to the current post ID.
 *
 * @see http://wordpress.stackexchange.com/a/187712/26350
 */

add_action( 'add_meta_boxes_post', function( $post )
{
    add_filter( 'query', function( $sql ) use ( $post )
    {
        global $wpdb;
        $find = "SELECT meta_key
                 FROM $wpdb->postmeta
                 GROUP BY meta_key 
                 HAVING meta_key NOT LIKE '\\\_%'
                 ORDER BY meta_key 
                 LIMIT 30";
        if(    preg_replace( '/\s+/', ' ', $sql ) === preg_replace( '/\s+/', ' ', $find )
            && $post instanceof WP_Post  
        ) {
            $post_id = (int) $post->ID;
            $sql  = "SELECT meta_key
                     FROM $wpdb->postmeta
                     WHERE post_id = {$post_id}
                     GROUP BY meta_key
                     HAVING meta_key NOT LIKE '\\\_%'
                     ORDER BY meta_key
                     LIMIT 30";
        }
        return $sql;
    } );                                                            
} );

এখানে আমরা add_meta_boxes_{$post_type}হুক ব্যবহার করি , যেখানে $post_type = 'post'

এখানে আমরা পুরো ক্যোয়ারীটি অদলবদল করি তবে গতিশীল সীমাটিকে সমর্থন করার জন্য আমরা এটিকেও সামঞ্জস্য করতে পারি।

আশা করি আপনি এটি আপনার প্রয়োজনের সাথে সামঞ্জস্য করতে পারেন।

হালনাগাদ:

এই সম্ভাব্য ধীর এসকিউএল কোর ক্যোয়ারী, এখন থেকে ডাব্লুপি সংস্করণ 4.3 এডজাস্ট করা হয়েছে

SELECT meta_key 
FROM wp_postmeta 
GROUP BY meta_key 
HAVING meta_key NOT LIKE '\\_%' 
ORDER BY meta_key 
LIMIT 30

প্রতি:

SELECT DISTINCT meta_key
FROM wp_postmeta
WHERE meta_key NOT BETWEEN '_' AND '_z'
HAVING meta_key NOT LIKE '\_%'
ORDER BY meta_key
LIMIT 30;

আরও তথ্যের জন্য মূল টিকিট # 24498 দেখুন।


2

আপনি যদি ফাংশনের উত্স কোডের মাধ্যমে ব্রাউজ করেন তবে আপনি এটি দেখতে পাবেন:

$keys = apply_filters( 'postmeta_form_keys', null, $post );
if ( null === $keys ) {
    ...      
}

postmeta_form_keysহুক ব্যবহার করে আপনি এই অদক্ষ জিজ্ঞাসাকে পুরোপুরি কল এড়াতে কীগুলি ম্যানুয়ালি নির্দিষ্ট করতে পারেন:

add_filter('postmeta_form_keys', function(){
    return ['your_meta_key'];
});

মজাদার. সোর্স কোডটিতে এটি কোথায় রয়েছে?
psorensen

ডাব্লুপি-অ্যাডমিন / অন্তর্ভুক্ত / টেম্পলেট.পিপি: 595 হিসাবে 4.4
মার্কডহাইট

2

আপনি এটি চেষ্টা করে দেখতে পারেন এটি কোনও সমাধান নয়, একটি অস্থায়ী কর্মক্ষেত্র।

// disable big slowdown http://wordpress.stackexchange.com/questions/187612/admin-very-slow-edit-page-caused-by-core-meta-query
function dj_limit_postmeta( $string, $post ) {
    return array(null);
}
add_filter( 'postmeta_form_keys', 'dj_limit_postmeta', 10, 3 );

-1

মেটাবক্সগুলি অপসারণ করা ধীর কোয়েরিকেও প্রতিরোধ করে।

function remove_metaboxes() {
     remove_meta_box( 'postcustom', 'page', 'normal' );
}
add_action('admin_menu', 'remove_metaboxes');
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.