الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

توقف MySQL عن الاستجابة في وقت الضغط!

مغلق
بدأه الاحتراف في 14 يوليو 2007 · 6 رد · 1,619 مشاهدة · في قواعد بيانات MySQL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اواجه مشكلة خطيرة جدا جدا!

لدي جدول innodb استخدمه لتسجيل الزوار الموجودين في الموقع ( عداد ) ، فجأة يتوقف الموقع عن الاستجابة وعندي فحصي للسيرفر MySQL اجد انه هنالك اكثر من 200 اتصال مفتوح وعالق ومعظها متعلقة بهذا الجدول (DELETE + UPDATE)!!

ملاحظات:

- لدي سيرفر خاص بالـ MySQL وبذاكرة وسرعة عالية جدا.

- استخدم innodb لانها اكثر امان حيث ان لي تجارب مع MyISAM ادت الى تلف بعض الجداول.

- لا استخدم transactions.

- قمت بفحص جميع اعدادات السيرفر وتأكدت من انها صحيحة.

- عند ايقاف الـ MySQL واعادة تشغيله ( حتى في وقت الذروة والنشاط العالي ) يعود الموقع للعمل بشكل ممتاز ولساعات طويلة دون اي مشكلة!!! بمعنى ان الضغط لم يزول ولكن المشكلة زالت !!

- تكوين الجدول:

CREATE TABLE `onlineusers` (						   
					  `timestamp` int(15) NOT NULL default '0',				   
					  `ip` varchar(40) collate latin1_bin NOT NULL default '',	
					  KEY `ip` (`ip`)											 
					) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=latin1_bin

اين تكمن المشكلة ؟؟

كيف يمكنني زيادة فعالية أداء الجدول؟؟

الرجاء المساعدة للضرورة !!!

#2

الرجاء المساعدة!

#3

السلام عليكم

حاول إغلاق الاتصال بقاعدة البيانات بعد كل تنفيذ لاستعلام إضافة او حذف أو تعديل...

لعل السبب يكون في ذلك..

إغلاق الاتصال بقاعدة البيانات:

mysql_close();

الحكيم

بسم الله الرحمن الرحيم

و قل ربي زدني علماً

صدق الله العظيم

#4

شكرا على ردك أخي

ولكن ،، لا استطيع اغلاق الاتصال بعد كل عملية لان هذا سوف يشكل بحد ذاته ضغط في انشاء اتصالات جديدة وبكثافة عالية !!

ولكنني اقوم باغلاق الاتصال في نهاية جميع التعليمات الموجودة في الصفحة سواء امتعلقة بهذا الجدول او غيره.

الرجاء التعقيب

#5

إذا كان لديك سيرفر خاص بك قم بزيادة عدد ال Max connections لعدد أكبر من default حيث ال default=100 connection .

CONSOLE

mysql>set @@global.max_connections=300;

وأيضا قم بتقليل زمن ال timeout للكونيكشنس التي لديك حيث ال default يكون 8 ساعات لتجعله مثلا 10 دقائق أو شيء من هذا القبيل كالتالي :

CONSOLE

mysql> set global wait_timeout =600;

لأن ال connections الكثيرة الغير مستغلة تكون Sleep ويوجد Bug في mysql لايستغل ال connections ال sleep لكن يكون new connections في بعض الأحيان مما يزيد عدد الإتصالات المفتوحة عن الحد الأقصى لل max_connections وتدخل في خطأ :Too many connections

وللتأكد من القيم :

CONSOLE

mysql> show global variables like "wait_timeout";

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#6

السلام عليكم

شكرا لك اخي على ردك .. قمت بتحديث الاعدادات بحسب توصياتك

لقد عثرت اثناء بحثي على العديد من النشرات التي توضح كيفية الاعداد الامثل للـ MySQl ولكن .. هل يوجد لديك اي موقع او نشرة توصي بها يمكنني الاستفادة منها في اعداد السيرفر ؟

شكرا

#7

أخي HGB،

للأسف حدثت المشكلة نفسها حتى بعد تحديث الاعدادات!! ففي خلال دقائق اصبح عدد الاتصالات على قاعدة البيانات اكثر من 220 اتصال وتوقف الموقع عن الاستجابة!!

هل من توصيات؟

هذا الموضوع مغلق.

مواضيع مشابهة