ctx, cancel := context.WithCancel(context.Background())
// Cancel 5 seconds in.
go func() {
time.Sleep(time.Second * 5)
cancel()
}()
// This query should take 10 seconds to return.
rows, err := dbt.db.QueryContext(ctx, "SELECT v, SLEEP(10) FROM test LIMIT 1")
fmt.Println(rows, err)
بعد قراءة https://github.com/go-sql-driver/mysql/issues/496 و https://github.com/go-sql-driver/mysql/pull/608 ، كان لدي انطباع بأنه في على سبيل المثال أعلاه ، سيتم إلغاء الاستعلام الأساسي في منتصف التنفيذ ، ولكن لا يبدو أن هذا هو الحال. لا يزال الأمر يستغرق 10 ثوانٍ للعودة (ويظهر الاستعلام في قائمة عمليات MySQL) ، وإن كان ذلك مع الخطأ sql: Rows are closed
. هل هذا يعني أن السائق غير قادر في الواقع على إلغاء الاستعلام الأساسي الذي يعمل على الخادم؟
مرحبًا ، أنا مؤلف # 608.
هل هذا يعني أن السائق غير قادر في الواقع على إلغاء الاستعلام الأساسي الذي يعمل على الخادم؟
نعم ، لا يؤدي تطبيقي إلى إنهاء الاستعلام الذي يتم تشغيله على الخادم.
لا يزال في حالة TODO.
لمعلوماتك ، يمكنك تحديد وقت تنفيذ الاستعلام عبر تلميح.
https://dev.mysql.com/doc/refman/5.7/en/optimizer-hints.html#optimizer - تلميحات-وقت التنفيذ
تضمين التغريدة
هل هناك أي خطط لإصلاح ذلك TODO؟
هل هناك أي خطط لإصلاح ذلك TODO؟
https://github.com/go-sql-driver/mysql/pull/791
يبدو أنه في حدث هام بالمناسبة. بالنسبة للآخرين الذين يضيفون كسر الدائرة إلى الخدمات ويجدون أن الاستعلامات لا تزال قائمة في mysql ، فقد ترغب في مشاهدة هذه المشكلات والرد عليها حتى يعرف المشرفون أن هناك فائدة.
توقع معظم زملائي أن يعمل هذا لأنهم كانوا أكثر دراية بـ postgres حيث من المعروف أن مهام سير العمل تعمل ، ويكون تنفيذها أكثر سهولة / مدعومة من جلسة الاستعلام محليًا دون إجراء المزيد من الاتصالات.
في الوقت الحالي ، أقوم بتوثيق في مؤسستي أن mysql أقل ملاءمة هنا وأن الدعم الفعال لمثل هذه الميزة سيضمن تغيير خادم mysql لواجهة الاتصال الخاصة به.
سيكون من الجيد إيجاد حل لأن لدينا الكثير من استخدام mysql في الوقت الحالي. :-)
https://medium.com/@rocketlaunchr.cloud/canceling -mysql-in-go-827ed8f83b30
التعليق الأكثر فائدة
هل هناك أي خطط لإصلاح ذلك TODO؟