পিএইচপি এবং মাইএসকিউএল এর মধ্যে কি অদ্ভুত ক্যোয়ারির সময়সীমা সৃষ্টি হতে পারে?


11

আমি বিভিন্ন বিভিন্ন গ্রাহক দ্বারা ব্যবহৃত একটি সফটওয়্যার-হিসাবে-পরিষেবা অ্যাপ্লিকেশনটির সিনিয়র বিকাশকারী। আমাদের সফ্টওয়্যারটি মাইএসকিউএল ব্যাকএন্ড দ্বারা চালিত, অ্যাপাচি / পিএইচপি অ্যাপ্লিকেশন সার্ভারের একটি ক্লাস্টারে চলে। উপর এক সফটওয়্যার নির্দিষ্ট উদাহরণস্বরূপ, বিভাগ নামের তালিকা ক্যোয়ারীতে পিএইচপি কোড আউট সময়জ্ঞান হয় যখন গ্রাহক চেয়ে বেশি 29 বিভাগ আছে । আমি জানি এটি কোনও অর্থবহ নয়; 30 নম্বর সম্পর্কে বিশেষ কিছু নেই যা এটি ভেঙে দেবে এবং অন্যান্য গ্রাহকদের 30 টিরও বেশি বিভাগ থাকবে তবে যাইহোক, সমস্যাটি 100% প্রজননযোগ্য যখন এই ইনস্টলটিতে 30 বা ততোধিক বিভাগ থাকে এবং 30 টিরও কম বিভাগ থাকলেই চলে যায়।

প্রশ্নে সারণীটি হ'ল:

CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(64) NOT NULL,
  `title` varchar(128) NOT NULL,
  `parent` int(10) unsigned NOT NULL,
  `keywords` varchar(255) NOT NULL,
  `description` text NOT NULL,
  `status` enum('Active','Inactive','_Deleted','_New') NOT NULL default 'Active',
  `style` enum('_Unknown') default NULL COMMENT 'Autoenum;',
  `order` smallint(5) unsigned NOT NULL,
  `created_at` datetime NOT NULL,
  `modified_at` datetime default NULL,
  PRIMARY KEY  (`id`),
  KEY `name` (`name`),
  KEY `parent` (`parent`),
  KEY `created_at` (`created_at`),
  KEY `modified_at` (`modified_at`),
  KEY `status` (`status`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COMMENT='R2' AUTO_INCREMENT=33 ;

প্রশ্নের মধ্যে কোডটি পুনরায় ক্রমশ সমস্ত বিভাগ আনতে সারণিকে জিজ্ঞাসা করে। এটি ই

SELECT * FROM `categories` WHERE `parent`=0 ORDER BY `order`,`name`

এবং তারপরে ফিরে আসা প্রতিটি সারির জন্য এই ক্যোয়ারী পুনরাবৃত্তি করে তবে WHERE parent=$category_idপ্রতিটি সময় ব্যবহার করে। (আমি নিশ্চিত যে এই পদ্ধতিটি উন্নত করা যেতে পারে তবে এটি সম্ভবত অন্য একটি প্রশ্ন)

আমি যতদূর বলতে পারি, নিম্নলিখিত কোয়েরিটি চিরকাল ঝুলছে:

SELECT * FROM `categories` WHERE `parent`=22 ORDER BY `order`,`name`

আমি সার্ভারের মাইএসকিএল ক্লায়েন্টে এই ক্যোয়ারীটি পুরোপুরি সূক্ষ্মভাবে সম্পাদন করতে পারি এবং আমি পিএইচপিএমআইএডমিনে সমস্যা ছাড়াই এটি সম্পাদন করতে পারি।

মনে রাখবেন যে এটি সেই নির্দিষ্ট কোয়েরি নয় যা সমস্যা। আমি যদি DELETE FROM categories WHERE id=22তখন উপরেরটির মতো একটি আলাদা কোয়েরি হ্যাং করব। এছাড়াও, আমি যখন ম্যানুয়ালি এটি চালাচ্ছি তখন উপরের ক্যোয়ারী শূন্য সারিগুলি দেয়

আমার সন্দেহ টেবিল দুর্নীতিগ্রস্ত হতে পারে, এবং আমি চেষ্টা REPAIR TABLEএবং OPTIMIZE TABLEকিন্তু এগুলোর নিম্নস্থ সমস্যার রিপোর্ট কিংবা ইস্যু সমাধান। আমি টেবিলটি ফেলে দিয়ে পুনরায় তৈরি করেছি, তবে সমস্যাটি ফিরে এল। এটি ঠিক একই টেবিল কাঠামো এবং পিএইচপি কোড অন্য গ্রাহকরা 30 টিরও বেশি বিভাগযুক্ত গ্রাহকগণ সহ অন্য কারও জন্য কোনও সমস্যা ছাড়াই ব্যবহার করছেন।

পিএইচপি কোড চিরতরে পুনরাবৃত্তি হচ্ছে না । (এটি নয় এবং অসীম লুপ)

মাইএসকিউএল সার্ভার i686 (মাইএসকিউএল কমিউনিটি এডিশন (জিপিএল) - তে পিসি-লিনাক্স-জিএনএনউর জন্য মাইএসকিএলড ভার্ 5.0.92-সম্প্রদায়ের সাথে সেন্টোজ লিনাক্স চালাচ্ছে

মাইএসকিউএল সার্ভারে লোড কম: লোড গড়: 0.5x, 0.75, 0.73, সিপু (গুলি): 4.6% আমাদের, 2.9% সিআই, 0.0% নী, 92.2% আইডি, 0.0% ওয়া, 0.0% হাই, 0.3% সি, 0.0% ম। অবহেলিত অদলবদল (448 কে) ব্যবহৃত হচ্ছে

আমি কীভাবে এই সমস্যাটি সমাধান করব? কি হতে পারে কোন পরামর্শ?

আপডেট: আমি TRUNCEটেবিলটি সম্পাদনা করেছি এবং 30 টি সারি ডামি ডেটা sertedুকিয়েছি:

INSERT INTO `categories` (`id`, `name`, `title`, `parent`, `keywords`, `description`, `status`, `style`, `order`, `created_at`, `modified_at`) VALUES
(1, 'New Category', '', 0, '', '', 'Inactive', NULL, 1, '2011-10-25 12:06:30', '2011-10-25 12:06:34'),
(2, 'New Category', '', 0, '', '', 'Inactive', NULL, 2, '2011-10-25 12:06:39', '2011-10-25 12:06:40'),
(3, 'New Category', '', 0, '', '', 'Inactive', NULL, 3, '2011-10-25 12:06:41', '2011-10-25 12:06:42'),
(4, 'New Category', '', 0, '', '', 'Inactive', NULL, 4, '2011-10-25 12:06:46', '2011-10-25 12:06:47'),
(5, 'New Category', '', 0, '', '', 'Inactive', NULL, 5, '2011-10-25 12:06:49', NULL),
(6, 'New Category', '', 0, '', '', 'Inactive', NULL, 6, '2011-10-25 12:06:51', '2011-10-25 12:06:52'),
(7, 'New Category', '', 0, '', '', 'Inactive', NULL, 7, '2011-10-25 12:06:53', '2011-10-25 12:06:54'),
(8, 'New Category', '', 0, '', '', 'Inactive', NULL, 8, '2011-10-25 12:06:56', '2011-10-25 12:06:57'),
(9, 'New Category', '', 0, '', '', 'Inactive', NULL, 9, '2011-10-25 12:06:59', '2011-10-25 12:06:59'),
(10, 'New Category', '', 0, '', '', 'Inactive', NULL, 10, '2011-10-25 12:07:01', '2011-10-25 12:07:01'),
(11, 'New Category', '', 0, '', '', 'Inactive', NULL, 11, '2011-10-25 12:07:03', '2011-10-25 12:07:03'),
(12, 'New Category', '', 0, '', '', 'Inactive', NULL, 12, '2011-10-25 12:07:05', '2011-10-25 12:07:05'),
(13, 'New Category', '', 0, '', '', 'Inactive', NULL, 13, '2011-10-25 12:07:06', '2011-10-25 12:07:07'),
(14, 'New Category', '', 0, '', '', 'Inactive', NULL, 14, '2011-10-25 12:07:08', '2011-10-25 12:07:09'),
(15, 'New Category', '', 0, '', '', 'Inactive', NULL, 15, '2011-10-25 12:07:11', '2011-10-25 12:07:12'),
(16, 'New Category', '', 0, '', '', 'Inactive', NULL, 16, '2011-10-25 12:07:13', '2011-10-25 12:07:14'),
(17, 'New Category', '', 0, '', '', 'Inactive', NULL, 17, '2011-10-25 12:09:41', '2011-10-25 12:09:42'),
(18, 'New Category', '', 0, '', '', 'Inactive', NULL, 18, '2011-10-25 12:09:47', NULL),
(19, 'New Category', '', 0, '', '', 'Inactive', NULL, 19, '2011-10-25 12:09:48', NULL),
(20, 'New Category', '', 0, '', '', 'Inactive', NULL, 20, '2011-10-25 12:09:48', NULL),
(21, 'New Category', '', 0, '', '', 'Inactive', NULL, 21, '2011-10-25 12:09:49', NULL),
(22, 'New Category', '', 0, '', '', 'Inactive', NULL, 22, '2011-10-25 12:09:50', NULL),
(23, 'New Category', '', 0, '', '', 'Inactive', NULL, 23, '2011-10-25 12:09:51', NULL),
(24, 'New Category', '', 0, '', '', 'Inactive', NULL, 24, '2011-10-25 12:09:51', NULL),
(25, 'New Category', '', 0, '', '', 'Inactive', NULL, 25, '2011-10-25 12:09:52', NULL),
(26, 'New Category', '', 0, '', '', 'Inactive', NULL, 26, '2011-10-25 12:09:53', NULL),
(27, 'New Category', '', 0, '', '', 'Inactive', NULL, 27, '2011-10-25 12:09:54', NULL),
(28, 'New Category', '', 0, '', '', 'Inactive', NULL, 28, '2011-10-25 12:09:55', NULL),
(29, 'New Category', '', 0, '', '', 'Inactive', NULL, 29, '2011-10-25 12:09:56', NULL),
(30, 'New Category', '', 0, '', '', 'Inactive', NULL, 30, '2011-10-25 12:09:57', NULL);

কোনও পিতামাতাই মোটেই নেই , সমস্ত বিভাগ শীর্ষ স্তরে। সমস্যা এখনও আছে। নিম্নলিখিত ক্যোয়ারী, পিএইচপি দ্বারা সম্পাদিত, ব্যর্থ:

SELECT * FROM `categories` WHERE `parent`=22 ORDER BY `order`,`name`

এখানে EXPLAIN:

mysql> EXPLAIN SELECT * FROM `categories` WHERE `parent`=22 ORDER BY `order`,`name`;
+----+-------------+------------+------+---------------+--------+---------+-------+------+-----------------------------+
| id | select_type | table      | type | possible_keys | key    | key_len | ref   | rows | Extra                       |
+----+-------------+------------+------+---------------+--------+---------+-------+------+-----------------------------+
|  1 | SIMPLE      | categories | ref  | parent        | parent | 4       | const |    1 | Using where; Using filesort | 
+----+-------------+------------+------+---------------+--------+---------+-------+------+-----------------------------+
1 row in set (0.00 sec)

আপডেট # 2: আমি এখন নিম্নলিখিত সমস্ত চেষ্টা করেছি:

  1. আমি এই টেবিল এবং ডেটা একই সফ্টওয়্যার দিয়ে একটি অন্য সাইটে অনুলিপি করেছি। সমস্যা হয়নি না টেবিল অনুসরণ করুন। এটি এই একটি ডাটাবেসের মধ্যে সীমাবদ্ধ বলে মনে হচ্ছে।
  2. জিবিএন এর উত্তর প্রস্তাবিত হিসাবে আমি সূচকটি পরিবর্তন করেছি। সমস্যা থেকেই গেল।
  3. আমি টেবিলটি বাদ দিয়ে একটি InnoDBটেবিল হিসাবে পুনরায় তৈরি করেছি এবং উপরে একই 30 টি সারি সন্নিবেশ করিয়েছি। সমস্যা থেকেই গেল।

আমার সন্দেহ হয় এটি অবশ্যই এই ডেটাবেসটির সাথে কিছু হতে পারে ...

আপডেট # 3: আমি সম্পূর্ণভাবে ডাটাবেসটি ফেলে দিয়েছিলাম এবং তার ডেটা আমদানি করে একটি নতুন নামে এটি পুনরায় তৈরি করেছি। সমস্যা থেকেই যায়।

আমি দেখেছি যে প্রকৃত পিএইচপি স্টেটমেন্ট যা হ্যাং করার জন্য একটি কল mysql_query()। এর পরের বিবৃতিগুলি কখনই কার্যকর করা হয় না।

সেই কলটি যখন স্তব্ধ হয়ে যায়, তখন মাইএসকিউএল থ্রেডটিকে ঘুমন্ত হিসাবে তালিকাভুক্ত করে !

mysql> show full processlist;
+-------+------------------+-----------------------------+----------------------+---------+------+-------+-----------------------+
| Id    | User             | Host                        | db                   | Command | Time | State | Info                  |
+-------+------------------+-----------------------------+----------------------+---------+------+-------+-----------------------+
|  5560 | root             | localhost                   | problem_db           | Query   |    0 | NULL  | show full processlist |  
                          ----- many rows which have no relevancy; only rows from this customer's app are shown ------
| 16341 | shared_db        | oak01.sitepalette.com:53237 | shared_db            | Sleep   |  308 |       | NULL                  | 
| 16342 | problem_db       | oak01.sitepalette.com:60716 | problem_db           | Sleep   |  307 |       | NULL                  | 
| 16344 | shared_db        | oak01.sitepalette.com:53241 | shared_db            | Sleep   |  308 |       | NULL                  | 
| 16346 | problem_db       | oak01.sitepalette.com:60720 | problem_db           | Sleep   |  308 |       | NULL                  |  
+-------+------------------+-----------------------------+----------------------+---------+------+-------+-----------------------+

আপডেট # 4: আমি এটিকে দুটি টেবিলের সংমিশ্রণে সংক্ষিপ্ত করে রেখেছি , categoriesউপরে বর্ণিত media_imagesসারণী এবং 556 সারি সহ একটি সারণী। যদি media_imagesটেবিলটিতে 556 টিরও কম সারি থাকে, বা categoriesটেবিলটিতে 30 টিরও কম সারি থাকে, সমস্যাটি চলে যায়। এটি এখানে একরকম মাইএসকিউএল সীমাবদ্ধতার মতো সীমাবদ্ধ বলে মনে হচ্ছে ...

আপডেট # 5: আমি কেবল ডেটাবেসটিকে সম্পূর্ণ আলাদা মাইএসকিউএল সার্ভারে স্থানান্তরিত করার চেষ্টা করেছি এবং সমস্যাটি চলে গেল ... সুতরাং এটি আমার প্রোডাকশন ডেটাবেস সার্ভারের সাথে সম্পর্কিত ...

আপডেট #:: এখানে পিএইচপি সম্পর্কিত প্রাসঙ্গিক কোড যা প্রতিটি সময় ঝুলে থাকে:

    public function find($type,$conditions='',$order='',$limit='')
    {
            if($this->_link == self::AUTO_LINK)
                    $this->_link = DFStdLib::database_connect();

            if(is_resource($this->_link))
            {
                    $q = "SELECT ".($type==_COUNT?'COUNT(*)':'*')." FROM `{$this->_table}`";
                    if($conditions)
                    {
                            $q .= " WHERE $conditions";
                    }
                    if($order)
                    {
                            $q .= " ORDER BY $order";
                    }
                    if($limit)
                    {
                            $q .= " LIMIT $limit";
                    }

                    switch($type)
                    {
                            case _ALL:
                                    DFSkel::log(DFSkel::LOG_DEBUG,"mysql_query($q,$this->_link);");
                                    $res = @mysql_query($q,$this->_link);
                                    DFSkel::log(DFSkel::LOG_DEBUG,"res = $res");

এই কোডটি উত্পাদনে রয়েছে এবং অন্যান্য সমস্ত ইনস্টলগুলিতে সূক্ষ্মভাবে কাজ করে। কেবল একটি ইনস্টলের উপর, এটি স্তব্ধ $res = @mysql_query($q,$this->_link);। আমি জানি কারণ আমি mysql_queryডিবাগ লগটিতে দেখি , এবং না res =এবং যখন আমি straceপিএইচপি প্রক্রিয়া করি তখন এটি স্তব্ধ হয়ে যায়read(

আপডেট করুন # যাই হোক না কেন এটি আই-ঘৃণা- এটি- এবং (# ^ & -সিসু! এটি এখন আমার দুই গ্রাহকের সাথেই ঘটতে শুরু করেছে I আমি সবেমাত্র আপ চালিয়েছিtcpdump এবং দেখে মনে হচ্ছে মাইএসকিউএল থেকে প্রাপ্ত প্রতিক্রিয়া কখনই পুরোপুরি প্রেরণ হয় নি। পুরো মাইএসকিউএল প্রতিক্রিয়া প্রেরণের আগে টিসিপি স্ট্রিমটি কেবল স্তব্ধ হয়ে গেছে বলে মনে হচ্ছে ((আমি এখনও তদন্ত করছি)

আপডেট # আমি-সম্পূর্ণ-পাগল-তবে-এটি-এখন-ধরণের কাজ করে: ঠিক আছে, এটি কোনও অর্থ দেয় না, তবে আমি একটি সমাধান খুঁজে পেয়েছি। আমি যদি মাইএসকিউএল সার্ভারের eth2ইন্টারফেসে একটি দ্বিতীয় আইপি ঠিকানা বরাদ্দ করি এবং এনএফএস ট্র্যাফিকের জন্য একটি আইপি এবং মাইএসকিউএলের জন্য দ্বিতীয় আইপি ব্যবহার করি, তবে সমস্যাটি চলে যায়। দেখে মনে হচ্ছে আমি কোনওভাবেই ... আইপি ঠিকানাটি ওভারলোড করছি যদি এনএফএস + মাইএসকিউএল ট্র্যাফিক উভয়ই সেই আইপিতে যায়। তবে এটি শূন্য করে তোলে কারণ আপনি একটি আইপি ঠিকানা "ওভারলোড" করতে পারবেন না। একটি ইন্টারফেস নিশ্চিত, তবে এটি একই ইন্টারফেস সন্তুষ্টি।

কোন ধারণা এখানে কি চলছে? এটি সম্ভবত এই সময়ে একটি ইউনিক্স.এসই বা সার্ভারফল্ট প্রশ্ন ... (কমপক্ষে এটি এখন কাজ করে ...)

আপডেট # কেন-ও-কেন: এই সমস্যাটি এখনও চলছে। এটি দুটি পৃথক আইপি ব্যবহার করেও ঘটতে শুরু করেছে। আমি নতুন ব্যক্তিগত আইপি তৈরি করতে পারি, তবে স্পষ্টতই কিছু ভুল।


ঠিক আছে, সমস্ত mysql এর মধ্যে পুনরাবৃত্ত হায়ারার্কিকাল কোয়েরি করার সম্ভাব্য 'অন্যান্য প্রশ্ন' এর লিঙ্ক ' s
ডেরেক ডাউনি

@ ডিস্টেস্ট নিশ্চিত, আমি এটি মুহূর্তের মধ্যে যুক্ত করব। অন্য লিঙ্কের জন্য ধন্যবাদ!
জোশ

আমরা এই প্রশ্নটি খুঁজে পাওয়ার জন্য যে কোনওর জন্য আড্ডায় সক্রিয়ভাবে এটির সমস্যা সমাধানের চেষ্টা করছি
জোশ

হাই জোশ আপনি বলেছিলেন যে প্রশ্নগুলি আপনার মাইএসকিউএল ক্লায়েন্টের ভিতরে এবং পিএইচপিএমইএডমিনে সাধারণত চলে? শুধুমাত্র পিএইচপি অ্যাপ্লিকেশন হ্যাং আউট?
মার্সিও

@মারসিওআলমদা হ্যাঁ, এটা ঠিক। এই পুরো পরিস্থিতি দেখে আমি চরম বিভ্রান্ত।
জোশ

উত্তর:


5

ক্যোয়ারী প্ল্যানে ঠিক কী চলছে তার সাধারণ প্রোফাইলিংয়ের জন্য, আপনি প্রফিলিং চেষ্টা করতে পারেন

এটি মূলত আপনাকে হ্যাঙ্গআপটি কোথায় তা নির্ধারণ করতে সহায়তা করবে।

অবশ্যই, এটি কেবল তখনই কাজ করে যদি আপনি মাইএসকিউএল সংকলন করেন enable-profiling


3

ধারণা (যদিও মাইআইএসএএম-তে প্রযোজ্য কিনা তা নিশ্চিত নয়, আমি ইনোডিবি-র সাথে কাজ করি)

"পিতামাতার" সূচকটি পরিবর্তন করুন সুতরাং এটি 3 কলামে রয়েছে: পিতামাতার, অর্ডার, নাম। এটি যেখানে .. অর্ডার দিয়ে মিলছে

সরান SELECT *। আপনার প্রয়োজনীয় কলামগুলি নিন। "পিতামাতার" সূচকে অন্য কোনও কলাম যুক্ত করুন

এটি অপটিমাইজারকে কেবল সূচকটি ব্যবহার করার অনুমতি দেবে কারণ এটি এখন আচ্ছাদন করে। এটি যেমন দাঁড়িয়েছে, আপনাকে পুরো টেবিলটি পড়তে হবে কারণ সূচিগুলি সেই ক্যোয়ারির জন্য কার্যকর নয়


parentসূচকটি পরিবর্তিত হওয়ার পরেও সমস্যাটি থেকে যায়(parent, order, name)
জোশ

3

আমি প্রোডাকশন ডিবি সার্ভারে বেশ কয়েকটি জিনিস পরীক্ষা করে দেখব

  • # 1 চেক করুন: / var / lib / mysql যেখানে মাউন্ট করা হয়েছে সেখানে ডেটা ভলিউমের খারাপ ব্লক না রয়েছে তা নিশ্চিত করুন। এটি fsck সম্পাদন করতে ডাউনটাইম প্রয়োজন হতে পারে (ফাইল সিস্টেম চেক)
  • # 2 চেক করুন: নিশ্চিত করুন যে টেবিলটি ডিএমএল (INSERT / আপডেট / ডিলিট) বা SELECTs সহ ভারী নয়
    • মাইআইএসএএম এর অধীনে প্রতিটি ডিএমএল স্টেটমেন্টের জন্য একটি পূর্ণ টেবিল লক দেওয়া হয়
    • InnoDB এর অধীনে, লেনদেনের বিচ্ছিন্নতার জন্য প্রচুর এমভিসিসি ডেটা উত্পন্ন হয় এবং ক্লাস্টার সূচক লকিংয়ের সামান্য হুমকি
  • # 3 চেক করুন: নিশ্চিত করুন যে পিএইচপি সঠিকভাবে মাইএসকিএল_ক্লোজ () জারি করছে এবং অ্যাপটি আপনার জন্য ডিবি সংযোগ বন্ধ করতে অ্যাপাচে নির্ভর করছে না। অন্যথায়, পিএইচপি যখন মাইএসকিউএল দ্বারা কার্যকরভাবে বন্ধ করা হয়েছে এমন ডিবি সংযোগ সংস্থানগুলি ব্যবহার করার চেষ্টা করতে পারে তখন আপনার কোনও ধরণের রেসের শর্ত থাকতে পারে।
  • # 4 চেক করুন: নিশ্চিত করুন যে ডিবি সার্ভারের ওএসের পিএইচপি এবং মাইএসকিউএল এর চোখের মধ্যে বন্ধ থাকা সংযোগগুলির নেটস্পট তালিকার মধ্যে TIME_WAITs এর স্টকপিল্ক নেই তবে ওএস এখনও চালু রয়েছে। আপনি এটি দিয়ে দেখতে পারেনnetstat | grep -i mysql | grep TIME_WAIT
  • # 5 দেখুন: নিশ্চিত করুন যে আপনি mysql_pcon সংযোগ ব্যবহার করছেন নাঅবিচ্ছিন্ন সংযোগগুলি সঠিকভাবে বন্ধ না হওয়ার বিষয়ে এখনও একটি ওপেন বাগ রিপোর্ট রয়েছে । আমি এই সংযোগগুলি অ্যাক্সেস করার চেষ্টা করা কল্পনা করতে ঘৃণা করি।
  • # 6 টি দেখুন: লোড ব্যালান্সার, সুইচস, ফায়ারওয়ালস এবং ডিএনএস সার্ভারের মাধ্যমে ডিবি ট্র্যাফিক থ্রুপুটটি প্রোডাকশন ডিবি সার্ভার এবং অন্যান্য বাহ্যিক সার্ভারগুলির জন্য অভিন্ন বলে নিশ্চিত করুন। ব্যক্তিগতভাবে, আমি mysql.user এবং mysql.db এর হোস্ট কলামে DNS নাম ব্যবহার করে ঘৃণা করি। আমি সাধারণত ক্লায়েন্টদের এগুলি ফেলা এবং হার্ড আইপি দিয়ে প্রতিস্থাপন করা হয়। আমিও যোগ skip-host-cacheএবং skip-name-resolveডিএনএস এর বাইপাস mysqld ব্যবহার করতে। আমি এইভাবে দেখার জন্য একটি চেকপয়েন্ট হিসাবে @ মার্কিওআলমাদের উত্তরের সাথে সম্পর্কিত হতে পারি।

আপনি যদি মনে করেন যে এই চেকগুলির কোনওটিই কার্যকর নয় তবে দয়া করে ASAP মন্তব্য করুন এবং আমাকে জানান যাতে আমি আমার উত্তর সরাতে পারি।


আমি অবশ্যই মনে করি এটি একটি দরকারী উত্তর! আমি না নিশ্চিত আমি সব সংযোগ বন্ধ করছি, তাই আমি যে চেষ্টা করতে পারেন। আমি মনে করি না যে /varএর কোনও খারাপ ব্লক রয়েছে (এটি একটি RAID10) তবে আমি সহজেই ভুল হতে পারি। আমি নেটস্ট্যাট চেক করব, সেখানে ভাল ধারণা! আমি ব্যবহার করছি না mysql_pconnectতবে নেটওয়ার্ক / ডিএনএস / ইত্যাদি পরীক্ষা করব।
জোশ

@ জোশ: আপনি যদি খারাপ ব্লকগুলি দেখতে পান তবে তাদের সম্পর্কে প্রচুর বার্তা থাকবে dmesg। আপনার যদি হার্ডওয়্যার RAID না থাকে তবে আপনার হার্ডওয়্যার রাইড মনিটরের প্রোগ্রামটি পরীক্ষা করুন।
ডার্বোবার্ট

যখন এটি ঘটে, আমি মাঝে মাঝে (তবে সর্বদা নয়) একটি একক TIME_WAITমাইএসকিউএল সংযোগ দেখতে পাব । কোনও উপায়ে বড় সংখ্যা নেই ... কার্যকলাপ সহ টেবিলটি ভারী নয়।
জোশ

2

ক) হাই জোশ। আপনি বলেছিলেন যে প্রশ্নগুলি আপনার মাইএসকিউএল ক্লায়েন্টের ভিতরে এবং পিএইচপিএমইএডমিনে সাধারণত চলে? শুধুমাত্র পিএইচপি অ্যাপ্লিকেশন হ্যাং আউট?
খ) @মারসিওআলমদা হ্যাঁ, এটা ঠিক

আমি বলতে চাই আপনি স্ক্র্যাডিনবগকে আঘাত করেছেন । আপনি die()আপনার কোয়েরির পরে বা তার আগে চেষ্টা করতে পারেন এবং আপনার কোড ব্রাউজ করার চেষ্টা করতে পারেন if statementsযার জন্য খুব কমই ঘটে। যখন আমাদের কাছে আপনার কোড নেই তখন কী স্তব্ধ হয় তা বলা শক্ত।

সম্পাদনা: আমি বর্তমানে বলব যে এটি এই লাইন হতে পারে

$this->_link = DFStdLib::database_connect();

যা (আমি ধরে নিই) সংযোগ তৈরি করে সর্বদা ফাংশন বলা হয়। সমস্যা হতে পারে। মাই সিএনএফ-এ আপনার সর্বাধিক সংযোগগুলি কী?


আমি কোথায় জানি এটি ঠিক জানি: এটি কখনই কল পায় নাmysql_query()
জোশ

1
আপনি কি আপনার কোডের 10 - 10 লাইন পোস্ট করতে পারবেন?
জেনেসিস

সম্পন্ন. আমি tcpdump আগামী কয়েক দিনের মধ্যে এটি দিয়ে ডিবাগ করতে যাচ্ছি । যদি এটি সত্যিই হয় পিএইচপি সমস্যা, তারপর আমি তাই একটি নতুন প্রশ্ন পোস্ট করা উচিত।
জোশ

@ জোশ: আমার উত্তর আপডেট করেছেন
জেনেসিস

ধন্যবাদ @ জেনিসিস ... তবে এটি দুটি কারণে নয়। 1. যে কোড শুধুমাত্র যদি আমি আমার "একটি ডাটাবেস লিংক স্বয়ংক্রিয়ভাবে স্থাপন" বৈশিষ্ট্য, যা সেট করে সম্পন্ন করা হয় ব্যবহার করছি বলা হয় $this->_linkএকটি ধ্রুবক হবে: self::AUTO_LINK২. যদিও আমি ছিলাম, সেই কোডটি যদি একটি হয় তবে: if($this->_link == self::AUTO_LINK)এবং পরবর্তী লাইনটির $this->_link = DFStdLib::database_connect();মান পরিবর্তন করে $this->_linkতাই ifআবার চালানো হবে না। আমি নিশ্চিত যে প্রতি থ্রেডে ডাটাবেসের সাথে কেবল একটি সংযোগ রয়েছে। (প্রক্রিয়া তালিকা দেখুন)
জোশ

1

আমি প্রায় নিশ্চিত হয়েছি যে এটি কোনও মাইএসকিউএল সমস্যাটির চেয়ে পিএইচপি সমস্যা, তবে তবুও যখন আমি মাইএসকিউএল সার্ভারগুলি স্যুইচ করি তখন কেন এটি কাজ করে?

কিছু প্রচেষ্টা:

  • ফায়ারওয়াল ?? এমন কি কোনও ফায়ারওয়াল আপনার অ্যাপ্লিকেশনটিকে অবরুদ্ধ করছে এবং আপনার প্রোডাকশন ডেটাবেস সার্ভার বা তদ্বিপরীত থেকে কোনও অনুরোধ করা থেকে বিরত করছে?

  • আপনি কি আপনার সংযোগ কনফিগারেশন বা একটি আইপি ঠিকানাতে একটি ডোমেন নাম ব্যবহার করছেন? একটি ডোমেন নাম ব্যবহার করে ডাটাবেস ইন্টারঅ্যাকশনটি কিছুটা কমিয়ে দিতে পারে এবং এটি একটি পিএইচপি সর্বাধিক স্ক্রিপ্ট এক্সিকিউশন সময়ের সাথে মিলিত হয়ে চিরকালের জন্য হ্যাঙ্গআউটের কারণ হতে পারে

এই সর্বশেষ পরামর্শটি ডেটাবেস সার্ভারগুলিতে স্যুইচ করার সময় অদ্ভুত পরিবর্তনশীল আচরণের ব্যাখ্যা করে বলে মনে হচ্ছে। একজন হয়ত অন্যটির চেয়ে দ্রুত সাড়া দিচ্ছেন এবং যেহেতু প্রতিটি পাওয়া রেকর্ডের জন্য আপনার কাছে একটি গৌণ কোয়েরি থাকবে, সেই অনুমানটি ব্যাখ্যা করবে যে অ্যাপ্লিকেশনটি কেন নির্দিষ্ট ফলাফলের (> 30) নির্দিষ্ট পরিমাণের সাথে বিলম্ব করে।

কমপক্ষে আমরা একটি প্রাথমিক সিদ্ধান্তে পৌঁছেছি। অবশ্যই সমস্যাটি মাইএসকিউএল সার্ভারের আইস্টেলফের নয়। ডকুমেন্টেশনটি একবার দেখে নিলেন এবং এমন কোনও বৈশিষ্ট্য সীমা নেই যা আপনার নির্দিষ্ট পরিস্থিতির জন্য উপযুক্ত, এছাড়াও আমার পুনরাবৃত্তির টেবিল এবং নির্দিষ্ট পরিমাণে প্রবেশের ক্ষেত্রে কখনও সমস্যা হয়নি।

আশা করি এইটি কাজ করবে.


0

আপনি কি পিএইচপি 5 স্থানীয় ড্রাইভার হিসাবে mysql_query () কমান্ডটি আপডেট করার চেষ্টা করেছেন? mysqli :: QUERY ()? নিশ্চিত না যে এটি কিছু করবে তবে শটের জন্য এটি মূল্যবান হতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.