سؤال

قمت الليلة الماضية بإضافة معلمة إلى إجراء مخزن في قاعدة بيانات MySQL.لقد قمت بالوصول إليه وأفسدت المعلمة وقررت إزالة المعلمة مرة أخرى للاختبار.بعد دقائق من إعادة إنشاء الإجراء بدون المعلمة، ظل كائن الأمر الخاص بي يشكو من فقدان المعلمة.هل هذا خطأ مكتبة mySQL أو MySQL/Connector أو ADO أو Enterprise، وماذا يمكنني أن أفعل حيال ذلك؟

هل كانت مفيدة؟

المحلول

افتراضيًا، يقوم MySQL بتخزين الاستعلامات مؤقتًا في إجراءاتك المخزنة.معرفة ما إذا تم تمكين ذاكرة التخزين المؤقت للاستعلام:

SHOW VARIABLES LIKE 'query_cache%'

لا يتم تخزين استدعاءات الإجراءات المخزنة مؤقتًا بواسطة MySQL، ولكن إذا query_cache_type قيد التشغيل، سيؤثر ذلك على التخزين المؤقت للاستعلامات الصادرة من داخل الإجراء.من المحتمل أن يتسبب ذلك في قيام MySQL بإرجاع نفس النتائج لبضع دقائق.حاول مسح ذاكرة التخزين المؤقت، أو الأفضل من ذلك، إعادة تعيين ذاكرة التخزين المؤقت للاستعلام لإزالة جميع الاستعلامات إذا استمر الإجراء المحدث في إعادة مجموعة النتائج السابقة:

RESET QUERY CACHE 

يجب أن يؤدي ذلك إلى القضاء على أي تخزين مؤقت بواسطة خادم MySQL.

في المرة القادمة التي يحدث فيها ذلك، يمكنك تنفيذ الإجراء يدويًا من خلال أداة أخرى لا تستخدم MySQL/Connector أو Enterprise Library.سيخبرك ذلك ما إذا كانت مجموعة النتائج القديمة قد تم تخزينها مؤقتًا بواسطة MySQL أو برامج التشغيل وكتل التطبيقات في التطبيق الخاص بك.

يحرر: يرجى قراءة التعليقات أدناه، بواسطة desertwebdesign.بعد إعادة إنشاء sproc، قم بإسقاط الاتصال.قد يؤدي تجميع الاتصالات إلى إبقاء الاتصال مفتوحًا، لذا فمن الأفضل قطع الاتصال من MySQL.تحتوي معظم متصفحات الاستعلام على علامة تبويب تسمح لك بإنهاء الاتصالات في MySQL إذا قمت بتسجيل الدخول باستخدام امتيازات العملية/الامتيازات الفائقة.

SHOW FULL PROCESSLIST
KILL CONNECTION thread_id
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top