نظرة سريعة على مجريات يوم سوالف
الفائزون في المسابقة الأصغر لسوالف كاست

 

العودة   سوالف سوفت > قسم تطوير وبرمجة المواقع للمتقدمين > PHP
المدوّنات البحث مشاركات اليوم اجعل كافة المشاركات مقروءة

رد
 
LinkBack أدوات الموضوع
عضو فعال جدا
تاريخ التسجيل: Jun 2003-
#1 (permalink)  
مشكلة 'max_user_connections' وضعف ال mysql_close()


السلام عليكم
هناك ضغط شديد على الموقع عندي (ملاحظة الموقع انا قمت ببرمجته - اي مبرمج ليس خبير)

ففي الاونة الاخيرة واجهت مشكلة انه كل شوي بتطلعلي مشكلة 'max_user_connections' وقمنا بزيادة عدد ال onnections في قاعدة البيانت ولاكن المشكلة مستمرة

الان قالت لي الشركة يجب ان تقوم باغلاق اي connection بعد الانتهاء من استخدامه اي بوضع mysql_close() في كل ملف موجود فيه امر استطلاع من قواعد البيانات!!!!!!!!!!!!!!!

قلتلهم اوك فرحت على جوجول عشان افهم ماذا تعني mysql_close() فلاحظة ان العديد من الناس تقول ان استخدام mysql_close() هو ضعف مبرمج!!!!!!!

يا اخوان مش عارف مين الصح!!!! اهل في الحقيق المفروض استخدام mysql_close() ؟؟
ولاكن السكربتات الكبيرة لا تستخدمها نهائيا

فما العمل وهل يجب استخدام mysql_close() ؟؟؟

وشكرا






__________________


عاشت فلسطين وعاشت المقاومة
http://www.palintefada.com/arabic
http://www.palissue.com/arabic
موقع انتفاضة فلسطين - موقع القضية الفلسطينية
الكاسر

elkaser غير متواجد حالياً   قديم 18-11-2006, 11:27 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: Sep 2006-
#2 (permalink)  

من رايي تستخدمها وتستخدم برضة mysql_free_result






DNSerror غير متواجد حالياً   قديم 19-11-2006, 12:53 AM
رد مع اقتباس
عضو فعال جدا
تاريخ التسجيل: Jun 2003-
#3 (permalink)  

السلام عليكم اخي العزيز طيب لنفرض انو استخدمناها - اذا وين نستخدمها بعد اي امر من الاوامر؟؟ select, delete, or update ????

ولمذا نستخدمها ما فائدتها ؟؟؟ (ملاحظة ان البعض يقول انها ضعف برمجي - والسكربتات القوية والكبرة لا تستخدمها نهائيا)

وايضا ياريت توضيح mysql_free_result لمذا نستخدمها ومتى؟؟
وشكرا






__________________


عاشت فلسطين وعاشت المقاومة
http://www.palintefada.com/arabic
http://www.palissue.com/arabic
موقع انتفاضة فلسطين - موقع القضية الفلسطينية
الكاسر

elkaser غير متواجد حالياً   قديم 19-11-2006, 10:35 AM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: May 2006-
#4 (permalink)  

يجب تفريغ الذاكرة من الاستعلامات

بعد كل استعلام Query يجب ان تفرغ الذاكرة منه بعدة طرق مثلا

كود PHP:
$sql mysql_query("select ...");

........... 
//

mysql_free_result($sql); 
أو

كود PHP:
unset($sql); 






na3im غير متواجد حالياً   قديم 19-11-2006, 12:20 PM
رد مع اقتباس
عضو فعال جدا
تاريخ التسجيل: Jun 2003-
#5 (permalink)  

اها شكرا جزيلا لتوضيحك - هذا سبب مقنع لسبب الضغط على الموقع عندي

بس توضيح اكثر اذا سمحت mysql_free_result تستخدم عند كل امر SELECT ام كل الاوامر INSERT و UPDATE و DELETE ايضا ؟؟؟؟؟؟؟؟

بارك الله فيك






__________________


عاشت فلسطين وعاشت المقاومة
http://www.palintefada.com/arabic
http://www.palissue.com/arabic
موقع انتفاضة فلسطين - موقع القضية الفلسطينية
الكاسر

elkaser غير متواجد حالياً   قديم 19-11-2006, 12:33 PM
رد مع اقتباس
مشرف قسم PHP
تاريخ التسجيل: Apr 2002-
#6 (permalink)  

استخدم ... الدالة mysql_pconnect فهي افضل في الاتصال بقاعدة البينات.
http://www.php.net/mysql_pconnect






__________________
I Love PHP (d4d@hotmail.com)
http://www.daif.net/
daif غير متواجد حالياً   قديم 19-11-2006, 04:22 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: May 2006-
#7 (permalink)  

نعم مع جميع الاوامر
select
update
...

الخ






na3im غير متواجد حالياً   قديم 20-11-2006, 12:38 PM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: May 2006-
#8 (permalink)  

السلام عليكم

اخي الكاسر شكرا لطرحك هالموضوع فعلا نحتاج نعرف اكثر كيف نسرع عمل قواعد البيانات ونسرع عملية تنفيذ الاستعلامات


خصوصا في المواقع والبرامج الكيرة


كما قال الاخ نعيم


mysql_free_result($sql);

أو

unset($sql);


لكن ايضا السؤال


اقتباس:
بس توضيح اكثر اذا سمحت mysql_free_result تستخدم عند كل امر SELECT ام كل الاوامر INSERT و UPDATE و DELETE ايضا ؟؟؟؟؟؟؟؟

اخي ضيف الله دالة جديدة اول مرة اعرفها صراحة

وجربتها ولاحظت فرق بسيط في الأداء

استخدمته بالشكل

$matt = mysql_pconnect($host , $user , $pass);


هل توجد اي بارامترات اضافية لها ؟


وايهما افضل في الطريقتين

الأولى :
-الاتصال بقاعدة البيانات
-جلب النتاجئ وتنفيذ الاستعلام
-تفريغ الذاكرة
-اغلاق الاتصال
-ثم تكرار العملية لتنفيذ استعلام اخر


الطريقة الثانية :
-الاتصال بقاعدة البيانات
-جلب النتاجئ وتنفيذ الاستعلام
-تفريغ الذاكرة
-ثم تكرار العملية لتنفيذ استعلام اخر

-اغلاق الاتصال





اتمنى الافادة مع خالص الشكر والتقدير






الإمبراطور وحيد غير متواجد حالياً   قديم 20-11-2006, 01:06 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: May 2006-
#9 (permalink)  

دالة mysql_pconnect تبقي الاتصال مفتوح

افضل mysql_connect

مع التحية






na3im غير متواجد حالياً   قديم 20-11-2006, 01:49 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: Sep 2006-
#10 (permalink)  

الاخ elkaser

مااتوقع انها ضعف برمجي :| ولو انها ضعف برمجي ماوضعت في ال php من الاساس

بس مثل ماقال الاخ ضيف استعمال mysql_pconnect افضل بكثير ويغنيك عن استعمال mysql_close

بالنسبة ل mysql_free_result افضل استخدامها في نهاية الملف يمكن استخدامها بعد الاستعلام مباشرة افضل ؟؟؟ ماادري صراحة

تحياتي






DNSerror غير متواجد حالياً   قديم 20-11-2006, 02:04 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: Nov 2003-
#11 (permalink)  

اخي الكاسر ..

الطريقة الصحيحة هي

الاتصال بقاعدة البيانات
جلب النتاجئ وتنفيذ الاستعلام
تفريغ الذاكرة
ثم تكرار العملية لتنفيذ استعلام اخر
اغلاق الاتصال

أي

كود PHP:
$link mysql_connect($db_server$db_user$db_pass);
mysql_select_db($db_name$link);

$sql1 mysql_query();
$row1 mysql_fetch_array($sql1);
mysql_free_result($sql1);

$sql2 mysql_query();
$row2 mysql_fetch_array($sql2);
mysql_free_result($sql2);

$sql3 mysql_query();
$row3 mysql_fetch_array($sql3);
mysql_free_result($sql3);

mysql_close($link); 






__________________
AlwatanVoice, www.alwatanvoice.com
Almashroo, www.almashroo.com

Pal Coder == Palestinian Coder
Pal Coder غير متواجد حالياً   قديم 20-11-2006, 03:16 PM
رد مع اقتباس
مشرف قسم تطوير المنتديات
تاريخ التسجيل: Jun 2005-
Blog Entries: 1
#12 (permalink)  

إذا إستخدمت دالة الـmysql_pconnect فان الاتصال يبقى مفتوحاً ولن يتم اغلاقه الا عن طريق دالة الاغلاق (لذا فهي غير مجديه بهذا الشأن) .

اقتباس:
the connection to the SQL server will not be closed when the execution of the script ends. Instead, the link will remain open for future use (mysql_close() will not close links established by mysql_pconnect()).
المصدر http://www.php.net/mysql_pconnect

أما دالة mysql_connect
فانها تغلق الاتصال عندما يتم الوصول لنهاية الملف ،،،، اي سوف يتم اغلاق الاتصال تلقائيا ولن تحتاج الى استخدام دالة الاغلاقmysql_close
أما إذا كنت تريد اغلاق الاتصال بمجرد الانتهاء منه قم باستخدام دالة الاغلاقmysql_close فوراً


اقتباس:
Note: The link to the server will be closed as soon as the execution of the script ends, unless it's closed earlier by explicitly calling mysql_close().
المصدر :http://www.php.net/manual/en/function.mysql-connect.php

الـvBulletin يستخدم دالة mysql_connect
كذلك MySmartBB
اتمنى اكن قد افدتك ولو بالقليل






__________________
######## PHP.SD ########
The launch was now

## mail@php.sd
HaMaDa4eVeR غير متواجد حالياً   قديم 20-11-2006, 08:24 PM
رد مع اقتباس
عضو فعال جدا
تاريخ التسجيل: Jun 2003-
#13 (permalink)  

السلام عليكم
اخواني بارك الله فيكم

ردا على الاخوان اخي العزيزي Pal Coder لم افهم مغزا كودك للاسف يرجا توضيح اكثر


اما الاخوان اذا نصل الى الخلاصة التالية
نستخدم ال mysql_connect
وايضا وضع mysql_free_result بعد كل امر يعني

كود PHP:
$call=mysql_query("SELECT * FROM DB");

while(
$row=mysql_fetch_array($call)){  
echo 
$row['id']; 

mysql_free_result($call); 
وايضا
كود PHP:
$call=mysql_query("INSERT INTO  DB id VALUES '$id'            ");
mysql_free_result($call); 


واخيرا
كود PHP:
$call=mysql_query("UPDATE DB SET name='$newname' WHERE id=$id ");
mysql_free_result($call); 
على فكرة يا اخوان لا اعلم لمذا يجب وضع mysql_free_result بعد امر ال insert و ال update كما اتصور ان ال mysql_free_result لتفريغ النتائج ولاكن ال insert و ال update يضيفن اوامر ولا يقوم باستخراج اوامر - يرجا توضيح بسيط






__________________


عاشت فلسطين وعاشت المقاومة
http://www.palintefada.com/arabic
http://www.palissue.com/arabic
موقع انتفاضة فلسطين - موقع القضية الفلسطينية
الكاسر

elkaser غير متواجد حالياً   قديم 20-11-2006, 08:57 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: Sep 2006-
#14 (permalink)  

على حسب مافهمت من موقع php على الرابط

http://www.php.net/mysql_pconnect

يوجد اختلافين رئيسيين عن mysql_connect

الاول :: mysql_pconnect تحاول البحث عن اي اتصال مفتوح مع القاعدة وتستعملة اي انها لاتفتح اتصال جديد مع القاعدة وهذة ميزة

الثاني :: يضل الاتصال مفتوح مع القاعدة للاستخدام لاحقا اي ان الاتصال لن يغلق حال انتهاء تنفيذ الملف

=================mysql_free_result

اتوقع من الموجود في موقع php.net مايأثر كثير مكان وضع mysql_free_result لانها راح تتنفذ في كل الحالات بعد انتها تنفيذ السكربت

للتاكد ممكن نستخدم memory_get_usage() حتى نشوف الذاكرة المستخدمة في كل الحالات ونقرر الافضل

ياليت الي يجرب يعطينا النتيجة

تحياتي






DNSerror غير متواجد حالياً   قديم 20-11-2006, 11:26 PM
رد مع اقتباس
مشرف قسمي تطوير الويب و تقنية محركات البحث
تاريخ التسجيل: Jun 2003-
#15 (permalink)  

السلام عليكم و رحمة الله و بركاته

اخي الكريم استخدم mysql_pconnect

صحيح انها لا تغلق و لكن الأخوان لم يوضحوا انها ميزه اوضحوا انها سيئة

في حال فتحت اتصال عن طريق pconnect

و من ثم جيت تتفتح اتصال pconnect ثاني لن يتم فتح الاتصال سيبحث عن اتصال مفتوح و يفذ عن طريقة يعني بالمختصر لا تستخدمها لسكريبت صفحه واحده لو كان موقع متكامل مثل الفي بي الي فيه مئات من الاوامر هذه افضل او حتى لأي سكريبت اخبار عليه زيارات كثيرة و لكن

عن نفسي استخدم pconnect للبرمجيات الي بيكون عليها hits كثيره فهي افضل


بالتوفيق






__________________
سبحان الله و بحمده .... سبحان الله العظيم

للمراسلة
b happy متواجد حالياً   قديم 20-11-2006, 11:58 PM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: May 2006-
#16 (permalink)  

اقتباس:
المشاركة الأصلية كتبت بواسطة Pal Coder
اخي الكاسر ..

الطريقة الصحيحة هي

الاتصال بقاعدة البيانات
جلب النتاجئ وتنفيذ الاستعلام
تفريغ الذاكرة
ثم تكرار العملية لتنفيذ استعلام اخر
اغلاق الاتصال

أي

كود PHP:
$link mysql_connect($db_server$db_user$db_pass);
mysql_select_db($db_name$link);

$sql1 mysql_query();
$row1 mysql_fetch_array($sql1);
mysql_free_result($sql1);

$sql2 mysql_query();
$row2 mysql_fetch_array($sql2);
mysql_free_result($sql2);

$sql3 mysql_query();
$row3 mysql_fetch_array($sql3);
mysql_free_result($sql3);

mysql_close($link); 
شكرا لإجابتك عن تساؤلاتي

وضحت النقاط
ولكم جزيل الشكر

وحيد ،






الإمبراطور وحيد غير متواجد حالياً   قديم 21-11-2006, 10:05 AM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: May 2006-
#17 (permalink)  

لماذا نستعمل mysql_pconnet
لاستخدام اتصال موجود مسبقا وعدم فتح اتصال جديد ؟

الحل هو كتابة اوامر الاتصال في ملف واستداعائه في كل صفحة
وهذا ما تستعمله البرامج الكبيرة مثل phpbb, vb, nuke. ...الخ

مع التحية






na3im غير متواجد حالياً   قديم 21-11-2006, 12:46 PM
رد مع اقتباس
رد


أدوات الموضوع

تعليمات المشاركة
لا تستطيع كتابة مواضيع
لا تستطيع كتابة ردود
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

كود [IMG] متاحة
كود HTML معطلة
Trackbacks are متاحة
Pingbacks are متاحة
Refbacks are متاحة



الساعة الآن: 12:23 AM بتوقيت المملكة العربية السعودية