Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

किए गए प्रश्नों की संख्या की गणना

मुझे लगता है कि आपने assert_queries . का उल्लेख करके अपने स्वयं के प्रश्न का उत्तर दिया है , लेकिन यहाँ जाता है:

मैं assert_queries . के पीछे के कोड पर एक नज़र डालने की सलाह दूंगा और इसका उपयोग करके अपनी खुद की विधि बनाने के लिए जिसका उपयोग आप प्रश्नों की गणना करने के लिए कर सकते हैं। यहां शामिल मुख्य जादू यह पंक्ति है:

ActiveSupport::Notifications.subscribe('sql.active_record', SQLCounter.new)

मैंने आज सुबह थोड़ा सा टिंकर किया और ActiveRecord के उन हिस्सों को निकाल दिया जो क्वेरी की गिनती करते हैं और इसके साथ आए:

module ActiveRecord
  class QueryCounter
    cattr_accessor :query_count do
      0
    end

    IGNORED_SQL = [/^PRAGMA (?!(table_info))/, /^SELECT currval/, /^SELECT CAST/, /^SELECT @@IDENTITY/, /^SELECT @@ROWCOUNT/, /^SAVEPOINT/, /^ROLLBACK TO SAVEPOINT/, /^RELEASE SAVEPOINT/, /^SHOW max_identifier_length/]

    def call(name, start, finish, message_id, values)
      # FIXME: this seems bad. we should probably have a better way to indicate
      # the query was cached
      unless 'CACHE' == values[:name]
        self.class.query_count += 1 unless IGNORED_SQL.any? { |r| values[:sql] =~ r }
      end
    end
  end
end

ActiveSupport::Notifications.subscribe('sql.active_record', ActiveRecord::QueryCounter.new)

module ActiveRecord
  class Base
    def self.count_queries(&block)
      ActiveRecord::QueryCounter.query_count = 0
      yield
      ActiveRecord::QueryCounter.query_count
    end
  end
end

आप ActiveRecord::Base.count_queries . का संदर्भ देने में सक्षम होंगे विधि कहीं भी। इसे एक ब्लॉक पास करें जिसमें आपके प्रश्न चलाए जाते हैं और यह निष्पादित किए गए प्रश्नों की संख्या लौटाएगा:

ActiveRecord::Base.count_queries do
  Ticket.first
end

मेरे लिए "1" लौटाता है। यह कार्य करने के लिए:इसे lib/active_record/query_counter.rb पर एक फ़ाइल में रखें और अपने config/application.rb . में इसकी आवश्यकता है इस तरह फाइल करें:

require 'active_record/query_counter'

अरे प्रेस्टो!

शायद थोड़ा सा स्पष्टीकरण आवश्यक है। जब हम इस लाइन को कहते हैं:

    ActiveSupport::Notifications.subscribe('sql.active_record', ActiveRecord::QueryCounter.new)

हम रेल 3 के छोटे अधिसूचना ढांचे में शामिल हैं। यह रेल के नवीनतम प्रमुख संस्करण के लिए एक चमकदार छोटा जोड़ है जिसके बारे में वास्तव में कोई नहीं जानता है। यह हमें subscribe . का उपयोग करके रेल के भीतर घटनाओं की सूचनाओं की सदस्यता लेने की अनुमति देता है तरीका। हम उस घटना में पास होते हैं जिसे हम पहले तर्क के रूप में सदस्यता लेना चाहते हैं, फिर कोई भी वस्तु जो call का जवाब देती है दूसरे के रूप में।

इस मामले में जब कोई क्वेरी निष्पादित की जाती है तो हमारा छोटा क्वेरी काउंटर ActiveRecord::QueryCounter.query_count चर को कर्तव्यपूर्वक बढ़ा देगा, लेकिन केवल वास्तविक के लिए प्रश्न।

वैसे भी यह मजेदार था। मुझे आशा है कि यह आपके लिए उपयोगी होगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - IN () के भीतर मानों द्वारा ऑर्डर करें

  2. php . का उपयोग करके mysql तालिका में टाइमस्टैम्प सहेजा जा रहा है

  3. किसी अन्य चयन के मूल्य के आधार पर चयन कैसे करें

  4. Laravel सेल डिफ़ॉल्ट डेटाबेस का पुनर्निर्माण करता है

  5. यदि मौजूद नहीं है तो MySql में डालें