السلام عليكم ورحمة الله وبركاته
لقد واجهتني مشكله في جملة الاستعلام SELECT
بعد ما تجاوز عدد السجلات 4 مليون سجل
لا أستطيع تجميل السجلات على أساس حقي نصي أو رقمي بدالة GROUP BY ؟
وجزاكم الله خير
السلام عليكم ورحمة الله وبركاته
لقد واجهتني مشكله في جملة الاستعلام SELECT
بعد ما تجاوز عدد السجلات 4 مليون سجل
لا أستطيع تجميل السجلات على أساس حقي نصي أو رقمي بدالة GROUP BY ؟
وجزاكم الله خير
اقتباس- يجب شرح المشكله بلغه واضحة مع توضيح كل المعلومات الفنية الممكنة عن المشكلة مع سرد الحلول التى اتبعتها حتى لا تتكرر الحلول التى قمت بهامع توضيح بنية قاعدة البيانات إذا كان المطلوب Query أو Stored procedure أو Trigger أو ما شابه.
للحصول عليها اضغط باليمين على قاعدة البيانات واختر all tasks ثم Generate SQL Script.
Technical Lead Developer
اللهم قنى شر الجهل و الجهلاء
( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}
أشكر أخي على مساعدتك وأرجو من الله أن تكون في ميزان حسناتك .
المشكلة هي :
في بداية الامر تعمل جملة الاستعلام معي بنسبة 100% . ولاتوجد أي مشكلة سواى في أي عملية أقوم بها مثل (max;sum;Group By). هذا قبل أن يصل عدد السجلات الى ثلاثة مليون وسبعمائة ألف .
بعد ذلك أخذ النظام يتئخر بعض الشي الان وصل عدد السجلات الى أربعة ملون ومئتان النظام لا يعيد أي قيمة تطلب منه مثل تجميع حقل نصي بأستخدام دالة Group By
وهذا المثال :
SELECT name_id
FROM Table1
GROUP BY name_id
..
فكان الرد !
sql execution error
executed sql statement : select name_id from table1 group by name_id
error source. net sqlClient Data Provider
error message : Timeout expired . The Timeout PERIOD ELAPSED PRIOR TO completion of the operation or the server is not responding.
*****************
هل يعتمد هذا الى أداء CPU في معالجة هذه السجلات أذا زاد عدد السجلات أثر من 4 مليون سجل ؟
أنا أستخدم معالج من نوع CORE2DUO 2.2 GHz مع RAM 2 GB
..................
مشكور أخي العزيز
أنا لا أستخدم نظام SERVER ولكن أستخدم Windows XP .
وأستخدم قاعدة بيانات Microsoft SQL Server 2005.
ما هى عبارة ال Connection String لديك و كيف تقوم بتحديد ال Timeout ؟
هل تستخدم Stored Procedure ام تعتمد على ad-hock Query ؟
هل هذه العبارة تعمل فى Transaction ام لا ؟
هل تقوم بغلق الاتصال بعد استدعاء عبارة ال Select ؟ فى حال الاجباة بنعم فكيف تقوم بغلق الاتصال من داخل الدوت نيت ؟
هل تقوم بتحميل كل هذا العدد من السجلات فى وقت واحد ام تقوم بعرضهم على مراحل لانى لا ارى لديك عبارة Where لتحديد شرط للسجلات المطلوبة ؟
ربما تكون المكشلة ناتجة من هنا لذا فقم باستدعاء السجلات حسب شرط معين و قم بعمل Data Paging اى تقسيم السجلات على عدة صفحات و ستجد العديد من الاخوة هنا تحدثوا فى هذا الجزء و يمكنك البحث فى اقسام الدوت نيت
ردك على الاسئلة السابقة سيساعد كثيراً فى معرفة سبب المشكلة
تم تعديل هذه المشاركة بواسطة Night Coder في 13 فبراير 2009 في 12:01
Technical Lead Developer
اللهم قنى شر الجهل و الجهلاء
( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}
شكرا أخي العزيز على مساعدتك لي :
**\ ما هى عبارة ال Connection String لديك و كيف تقوم بتحديد ال Timeout ؟
لا يوجد Connection String لاني أستخدم الاستعلام من داخل قاعدة البيانات .
**/ هل تستخدم Stored Procedure ام تعتمد على ad-hock Query ؟
تعتمد على ad-hock Query.
**/ هل هذه العبارة تعمل فى Transaction ام لا ؟
لا
**/ هل تقوم بغلق الاتصال بعد استدعاء عبارة ال Select ؟ فى حال الاجباة بنعم فكيف تقوم بغلق الاتصال من داخل الدوت نيت ؟
في هذه الحاله ليس لى خيار بغلق الاتصال ألا أن ينتهى من الاستدعاء لاني أستخدم الاستعلام من داخل بيئة sql server .
**/ هل تقوم بتحميل كل هذا العدد من السجلات فى وقت واحد ام تقوم بعرضهم على مراحل لانى لا ارى لديك عبارة Where لتحديد شرط للسجلات المطلوبة ؟
الغرض من هذا الاستدعاء هو تجميع السجلات على حسب الاسم , والشرط هو تجميع السجلات على حسب الاسم لم أستخدم عبار where لاني أريد عرض كافة الاسماء الموجودة في هذا الجدول غير مكررة .
**/ تحل هذا المشكلة أذا وظعت عبارة where في حقل مفتاح الرئيسي أي يبدأ من سجل0 الى سجل 2 مليون .
مثال أريد أستدعاء جميع الاسماء غير مكررة بأستخدام GROUP BY في الجدول (بغض النظر عن عدد السجلات ملاون أو مليونين أو عشرة مليون )
ولكن في هذه الحالة تواجهني بعض العقبات مثل أذا أستدعية جميع الاسماء بأستخدام عبارة GROUP BY من سجل 0 الى سجل 2 مليون .
في هذه الحالة تقوم جملة الاستعلام بأستدعاء جميع الاسماء من سجل 0 الى سجل 2 ملون .
وأذا أكملة المسيرة في جملة while أو for سوف يكون الرد عدد سجلات مكررة فيستوجب على في هذه الحالة أستخدام فلترة للسجلات المترجعة وهذه العملية سوف يكون فيها بعض المتاعب والصعوبات وسوف تقلل من أداء البرنامج .
أشكرك أخي جزيل الشكر،،،، وأسئل العلي القدير أن أن يجزيك خير الجزاء في الدنيا والاخره ....
هل هذه السجلات معمول لها index
وممكن تعمل full text search على ما اظن مش عارف اللى انا قولته ده صح ولا غلط
ياريت لو كنت حلتها تقول لأنى اكيد هاقع فى المشكلة دى
ولدي إليك وصيتي عهد الأسودْ
العز غايتنا نعيش لكي نسود
و عريننا في الأرض معروف الحدود
فاحم العرين و صنه عن عبث القرود
أظفارنا للمجد قد خُلقت فدى
و نيوبنا سُنَّت بأجساد العدى
و زئيرنا في الأرض مرهوب الصدى
نعلي على جثث الأعادي السؤددا
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…