[{"data":1,"prerenderedAt":13095},["ShallowReactive",2],{"navigation":3,"/models-and-databases/database-instrumentation":1016,"/models-and-databases/database-instrumentation-surround":13090},[4,54,89,123,165,211,253,331,389,439,462,488,514,540,578,624,650,672,702,736,774,800,850,856,862,868,874,928],{"title":5,"path":6,"stem":7,"children":8},"Introduction and Foundations","/introduction-and-foundations","01.introduction-and-foundations/01.index",[9,10,14,18,22,26,30,34,38,42,46,50],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"What is Django","/introduction-and-foundations/what-is-django","01.introduction-and-foundations/02.what-is-django",{"title":15,"path":16,"stem":17},"Key Concepts and Philosophy","/introduction-and-foundations/key-concepts-and-philosophy","01.introduction-and-foundations/03.key-concepts-and-philosophy",{"title":19,"path":20,"stem":21},"MVC vs MVT: Understanding Django's Architecture","/introduction-and-foundations/mvc-vs-mvt","01.introduction-and-foundations/04.mvc-vs-mvt",{"title":23,"path":24,"stem":25},"Project Structure Overview","/introduction-and-foundations/project-structure-overview","01.introduction-and-foundations/05.project-structure-overview",{"title":27,"path":28,"stem":29},"Installing Django","/introduction-and-foundations/installing-django","01.introduction-and-foundations/06.installing-django",{"title":31,"path":32,"stem":33},"Creating Your First Django Project","/introduction-and-foundations/creating-first-project","01.introduction-and-foundations/07.creating-first-project",{"title":35,"path":36,"stem":37},"Creating Your First Django App","/introduction-and-foundations/creating-first-app","01.introduction-and-foundations/08.creating-first-app",{"title":39,"path":40,"stem":41},"Your First Django \"Hello World\"","/introduction-and-foundations/hello-world","01.introduction-and-foundations/09.hello-world",{"title":43,"path":44,"stem":45},"Django Quick Start Guide","/introduction-and-foundations/quick-start-guide","01.introduction-and-foundations/10.quick-start-guide",{"title":47,"path":48,"stem":49},"How Django Handles Requests","/introduction-and-foundations/how-django-handles-requests","01.introduction-and-foundations/11.how-django-handles-requests",{"title":51,"path":52,"stem":53},"Django Settings","/introduction-and-foundations/django-settings","01.introduction-and-foundations/12.django-settings",{"title":55,"path":56,"stem":57,"children":58},"The Development Environment","/development-environment","02.development-environment/1.index",[59,61,65,69,73,77,81,85],{"title":60,"path":56,"stem":57},"Development Environment",{"title":62,"path":63,"stem":64},"Recommended Tooling for Django Development","/development-environment/recommended-tooling","02.development-environment/2.recommended-tooling",{"title":66,"path":67,"stem":68},"Virtual Environments","/development-environment/virtual-environments","02.development-environment/3.virtual-environments",{"title":70,"path":71,"stem":72},"Django Admin and Management Commands","/development-environment/admin-and-management-commands","02.development-environment/4.admin-and-management-commands",{"title":74,"path":75,"stem":76},"Django Project Settings","/development-environment/project-settings","02.development-environment/5.project-settings",{"title":78,"path":79,"stem":80},"Managing Django Environments: Local, Staging, and Production","/development-environment/environments-local-staging-production","02.development-environment/6.environments-local-staging-production",{"title":82,"path":83,"stem":84},"Running Django Development Server","/development-environment/running-development-server","02.development-environment/7.running-development-server",{"title":86,"path":87,"stem":88},"Working with Django Shell","/development-environment/working-with-shell","02.development-environment/8.working-with-shell",{"title":90,"path":91,"stem":92,"children":93},"Templates and Presentation Layer","/templates-and-presentation","03.templates-and-presentation/1.index",[94,95,99,103,107,111,115,119],{"title":90,"path":91,"stem":92},{"title":96,"path":97,"stem":98},"Introduction to Django Templates","/templates-and-presentation/introduction-to-templates","03.templates-and-presentation/2.introduction-to-templates",{"title":100,"path":101,"stem":102},"The Django Template Language","/templates-and-presentation/django-template-language","03.templates-and-presentation/3.django-template-language",{"title":104,"path":105,"stem":106},"Template Inheritance","/templates-and-presentation/template-inheritance","03.templates-and-presentation/4.template-inheritance",{"title":108,"path":109,"stem":110},"Built-in Template Tags and Filters","/templates-and-presentation/built-in-template-tags-and-filters","03.templates-and-presentation/5.built-in-template-tags-and-filters",{"title":112,"path":113,"stem":114},"Including Static Files","/templates-and-presentation/including-static-files","03.templates-and-presentation/6.including-static-files",{"title":116,"path":117,"stem":118},"Working with Media Files","/templates-and-presentation/working-with-media-files","03.templates-and-presentation/7.working-with-media-files",{"title":120,"path":121,"stem":122},"Using Alternative Template Engines","/templates-and-presentation/using-alternative-template-engines","03.templates-and-presentation/8.using-alternative-template-engines",{"title":124,"path":125,"stem":126,"children":127},"URLs and Views","/urls-and-views","04.urls-and-views/01.index",[128,129,133,137,141,145,149,153,157,161],{"title":124,"path":125,"stem":126},{"title":130,"path":131,"stem":132},"The URL Dispatcher","/urls-and-views/the-url-dispatcher","04.urls-and-views/02.the-url-dispatcher",{"title":134,"path":135,"stem":136},"Writing Function-Based Views","/urls-and-views/writing-function-based-views","04.urls-and-views/03.writing-function-based-views",{"title":138,"path":139,"stem":140},"View Decorators","/urls-and-views/view-decorators","04.urls-and-views/04.view-decorators",{"title":142,"path":143,"stem":144},"Rendering Responses","/urls-and-views/rendering-responses","04.urls-and-views/05.rendering-responses",{"title":146,"path":147,"stem":148},"Redirects","/urls-and-views/redirects","04.urls-and-views/06.redirects",{"title":150,"path":151,"stem":152},"Handling HTTP Methods","/urls-and-views/handling-http-methods","04.urls-and-views/07.handling-http-methods",{"title":154,"path":155,"stem":156},"Conditional View Processing","/urls-and-views/conditional-view-processing","04.urls-and-views/08.conditional-view-processing",{"title":158,"path":159,"stem":160},"File Uploads","/urls-and-views/file-uploads","04.urls-and-views/09.file-uploads",{"title":162,"path":163,"stem":164},"Using Django Shortcut Functions","/urls-and-views/using-django-shortcut-functions","04.urls-and-views/10.using-django-shortcut-functions",{"title":166,"path":167,"stem":168,"children":169},"Class Based Views","/class-based-views","05.class-based-views/01.index",[170,171,175,179,183,187,191,195,199,203,207],{"title":166,"path":167,"stem":168},{"title":172,"path":173,"stem":174},"Introduction to Class-Based Views","/class-based-views/introduction-to-class-based-views","05.class-based-views/02.introduction-to-class-based-views",{"title":176,"path":177,"stem":178},"Common Base Classes","/class-based-views/common-base-classes","05.class-based-views/03.common-base-classes",{"title":180,"path":181,"stem":182},"Built-in Generic Views","/class-based-views/built-in-generic-views","05.class-based-views/04.built-in-generic-views",{"title":184,"path":185,"stem":186},"Views for CRUD Operations","/class-based-views/views-for-crud-operations","05.class-based-views/05.views-for-crud-operations",{"title":188,"path":189,"stem":190},"Handling Forms with Class-Based Views","/class-based-views/handling-forms-with-class-based-views","05.class-based-views/06.handling-forms-with-class-based-views",{"title":192,"path":193,"stem":194},"Using Mixins","/class-based-views/using-mixins","05.class-based-views/07.using-mixins",{"title":196,"path":197,"stem":198},"URL Configuration with Class-Based Views","/class-based-views/url-configuration-with-class-based-views","05.class-based-views/08.url-configuration-with-class-based-views",{"title":200,"path":201,"stem":202},"Subclassing Generic Views","/class-based-views/subclassing-generic-views","05.class-based-views/09.subclassing-generic-views",{"title":204,"path":205,"stem":206},"Asynchronous Class-Based Views","/class-based-views/asynchronous-class-based-views","05.class-based-views/10.asynchronous-class-based-views",{"title":208,"path":209,"stem":210},"Pagination","/class-based-views/pagination","05.class-based-views/11.pagination",{"title":212,"path":213,"stem":214,"children":215},"Forms and User Input","/forms-and-user-input","06.forms-and-user-input/01.index",[216,217,221,225,229,233,237,241,245,249],{"title":212,"path":213,"stem":214},{"title":218,"path":219,"stem":220},"Understanding HTML Forms","/forms-and-user-input/understanding-html-forms","06.forms-and-user-input/02.understanding-html-forms",{"title":222,"path":223,"stem":224},"Django's Role in Form Handling","/forms-and-user-input/djangos-role-in-form-handling","06.forms-and-user-input/03.djangos-role-in-form-handling",{"title":226,"path":227,"stem":228},"Creating Forms with Forms API","/forms-and-user-input/creating-forms-with-forms-api","06.forms-and-user-input/04.creating-forms-with-forms-api",{"title":230,"path":231,"stem":232},"Form Validation","/forms-and-user-input/form-validation","06.forms-and-user-input/05.form-validation",{"title":234,"path":235,"stem":236},"Built-in Fields and Widgets","/forms-and-user-input/built-in-fields-and-widgets","06.forms-and-user-input/06.built-in-fields-and-widgets",{"title":238,"path":239,"stem":240},"Form Rendering in Templates","/forms-and-user-input/form-rendering-in-templates","06.forms-and-user-input/07.form-rendering-in-templates",{"title":242,"path":243,"stem":244},"Model Forms","/forms-and-user-input/model-forms","06.forms-and-user-input/08.model-forms",{"title":246,"path":247,"stem":248},"Advanced Form Techniques","/forms-and-user-input/advanced-form-techniques","06.forms-and-user-input/09.advanced-form-techniques",{"title":250,"path":251,"stem":252},"Security Considerations for Forms","/forms-and-user-input/security-considerations-for-forms","06.forms-and-user-input/10.security-considerations-for-forms",{"title":254,"path":255,"stem":256,"children":257},"Models and Databases","/models-and-databases","07.models-and-databases/01.index",[258,259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327],{"title":254,"path":255,"stem":256},{"title":260,"path":261,"stem":262},"Understanding Django Models","/models-and-databases/understanding-django-models","07.models-and-databases/02.understanding-django-models",{"title":264,"path":265,"stem":266},"Defining Fields","/models-and-databases/defining-fields","07.models-and-databases/03.defining-fields",{"title":268,"path":269,"stem":270},"Relationships and Foreign Keys","/models-and-databases/relationships-and-foreign-keys","07.models-and-databases/04.relationships-and-foreign-keys",{"title":272,"path":273,"stem":274},"Examples of Relationship Patterns","/models-and-databases/examples-of-relationship-patterns","07.models-and-databases/05.examples-of-relationship-patterns",{"title":276,"path":277,"stem":278},"Making Queries","/models-and-databases/making-queries","07.models-and-databases/06.making-queries",{"title":280,"path":281,"stem":282},"Filtering, Ordering, and Slicing","/models-and-databases/filtering-ordering-slicing","07.models-and-databases/07.filtering-ordering-slicing",{"title":284,"path":285,"stem":286},"Managers and QuerySets","/models-and-databases/managers-and-querysets","07.models-and-databases/08.managers-and-querysets",{"title":288,"path":289,"stem":290},"Aggregation","/models-and-databases/aggregation","07.models-and-databases/09.aggregation",{"title":292,"path":293,"stem":294},"Search","/models-and-databases/search","07.models-and-databases/10.search",{"title":296,"path":297,"stem":298},"Raw SQL Queries","/models-and-databases/raw-sql-queries","07.models-and-databases/11.raw-sql-queries",{"title":300,"path":301,"stem":302},"Transactions","/models-and-databases/transactions","07.models-and-databases/12.transactions",{"title":304,"path":305,"stem":306},"Multiple Databases","/models-and-databases/multiple-databases","07.models-and-databases/13.multiple-databases",{"title":308,"path":309,"stem":310},"Tablespaces","/models-and-databases/tablespaces","07.models-and-databases/14.tablespaces",{"title":312,"path":313,"stem":314},"Composite Primary Keys","/models-and-databases/composite-primary-keys","07.models-and-databases/15.composite-primary-keys",{"title":316,"path":317,"stem":318},"Database Instrumentation","/models-and-databases/database-instrumentation","07.models-and-databases/16.database-instrumentation",{"title":320,"path":321,"stem":322},"Database Optimization","/models-and-databases/database-optimization","07.models-and-databases/17.database-optimization",{"title":324,"path":325,"stem":326},"Fixtures","/models-and-databases/fixtures","07.models-and-databases/18.fixtures",{"title":328,"path":329,"stem":330},"Signals","/models-and-databases/signals","07.models-and-databases/19.signals",{"title":332,"path":333,"stem":334,"children":335},"Migrations","/migrations","08.migrations/01.index",[336,337,341,345,349,353,357,361,365,369,373,377,381,385],{"title":332,"path":333,"stem":334},{"title":338,"path":339,"stem":340},"How Migrations Work","/migrations/how-migrations-work","08.migrations/02.how-migrations-work",{"title":342,"path":343,"stem":344},"Management Commands","/migrations/management-commands","08.migrations/03.management-commands",{"title":346,"path":347,"stem":348},"Dependencies and Workflow","/migrations/dependencies-and-workflow","08.migrations/04.dependencies-and-workflow",{"title":350,"path":351,"stem":352},"Transaction Handling","/migrations/transaction-handling","08.migrations/05.transaction-handling",{"title":354,"path":355,"stem":356},"Adding Migrations to Apps","/migrations/adding-migrations-to-apps","08.migrations/06.adding-migrations-to-apps",{"title":358,"path":359,"stem":360},"Reversing Migrations","/migrations/reversing-migrations","08.migrations/07.reversing-migrations",{"title":362,"path":363,"stem":364},"Historical Models","/migrations/historical-models","08.migrations/08.historical-models",{"title":366,"path":367,"stem":368},"Considerations When Removing Fields","/migrations/considerations-when-removing-fields","08.migrations/09.considerations-when-removing-fields",{"title":370,"path":371,"stem":372},"Data Migrations","/migrations/data-migrations","08.migrations/10.data-migrations",{"title":374,"path":375,"stem":376},"Squashing Migrations","/migrations/squashing-migrations","08.migrations/11.squashing-migrations",{"title":378,"path":379,"stem":380},"Serializing Values","/migrations/serializing-values","08.migrations/12.serializing-values",{"title":382,"path":383,"stem":384},"Supporting Multiple Django Versions","/migrations/supporting-multiple-django-versions","08.migrations/13.supporting-multiple-django-versions",{"title":386,"path":387,"stem":388},"Django Serialization Framework","/migrations/django-serialization-framework","08.migrations/14.django-serialization-framework",{"title":390,"path":391,"stem":392,"children":393},"Authentication and Authorization","/authentication-and-authorization","09.authentication-and-authorization/01.index",[394,395,399,403,407,411,415,419,423,427,431,435],{"title":390,"path":391,"stem":392},{"title":396,"path":397,"stem":398},"Overview of Django's Authentication System","/authentication-and-authorization/overview-of-django-authentication-system","09.authentication-and-authorization/02.overview-of-django-authentication-system",{"title":400,"path":401,"stem":402},"Users and Groups","/authentication-and-authorization/users-and-groups","09.authentication-and-authorization/03.users-and-groups",{"title":404,"path":405,"stem":406},"Permissions","/authentication-and-authorization/permissions","09.authentication-and-authorization/04.permissions",{"title":408,"path":409,"stem":410},"Password Management","/authentication-and-authorization/password-management","09.authentication-and-authorization/05.password-management",{"title":412,"path":413,"stem":414},"Authentication Views","/authentication-and-authorization/authentication-views","09.authentication-and-authorization/06.authentication-views",{"title":416,"path":417,"stem":418},"Login and Logout","/authentication-and-authorization/login-and-logout","09.authentication-and-authorization/07.login-and-logout",{"title":420,"path":421,"stem":422},"Custom User Models","/authentication-and-authorization/custom-user-models","09.authentication-and-authorization/08.custom-user-models",{"title":424,"path":425,"stem":426},"Middleware for Authentication","/authentication-and-authorization/middleware-for-authentication","09.authentication-and-authorization/09.middleware-for-authentication",{"title":428,"path":429,"stem":430},"Authorization in Views and Templates","/authentication-and-authorization/authorization-in-views-and-templates","09.authentication-and-authorization/10.authorization-in-views-and-templates",{"title":432,"path":433,"stem":434},"Integrating Social Authentication","/authentication-and-authorization/integrating-social-authentication","09.authentication-and-authorization/11.integrating-social-authentication",{"title":436,"path":437,"stem":438},"Security Best Practices","/authentication-and-authorization/security-best-practices","09.authentication-and-authorization/12.security-best-practices",{"title":440,"path":441,"stem":442,"children":443},"Sessions, Cookies, and State","/sessions-cookies-state","10.sessions-cookies-state/01.index",[444,446,450,454,458],{"title":445,"path":441,"stem":442},"Sessions, Cookies, and State Management",{"title":447,"path":448,"stem":449},"Introduction to Sessions","/sessions-cookies-state/introduction-to-sessions","10.sessions-cookies-state/02.introduction-to-sessions",{"title":451,"path":452,"stem":453},"Working with Cookies","/sessions-cookies-state/working-with-cookies","10.sessions-cookies-state/03.working-with-cookies",{"title":455,"path":456,"stem":457},"Server-Side Session Storage Options","/sessions-cookies-state/server-side-session-storage-options","10.sessions-cookies-state/04.server-side-session-storage-options",{"title":459,"path":460,"stem":461},"Session Security","/sessions-cookies-state/session-security","10.sessions-cookies-state/05.session-security",{"title":463,"path":464,"stem":465,"children":466},"Working with Files","/working-with-files","11.working-with-files/01.index",[467,468,472,476,480,484],{"title":463,"path":464,"stem":465},{"title":469,"path":470,"stem":471},"Files in Models","/working-with-files/files-in-models","11.working-with-files/02.files-in-models",{"title":473,"path":474,"stem":475},"The File Object","/working-with-files/the-file-object","11.working-with-files/03.the-file-object",{"title":477,"path":478,"stem":479},"Storage Backends","/working-with-files/storage-backends","11.working-with-files/04.storage-backends",{"title":481,"path":482,"stem":483},"Using Cloud Storage Providers","/working-with-files/using-cloud-storage-providers","11.working-with-files/05.using-cloud-storage-providers",{"title":485,"path":486,"stem":487},"Managing Media in Production","/working-with-files/managing-media-in-production","11.working-with-files/06.managing-media-in-production",{"title":489,"path":490,"stem":491,"children":492},"Admin Site","/admin-site","12.admin-site/01.index",[493,494,498,502,506,510],{"title":489,"path":490,"stem":491},{"title":495,"path":496,"stem":497},"Enabling the Admin","/admin-site/enabling-the-admin","12.admin-site/02.enabling-the-admin",{"title":499,"path":500,"stem":501},"Registering Models","/admin-site/registering-models","12.admin-site/03.registering-models",{"title":503,"path":504,"stem":505},"Customizing Admin Display","/admin-site/customizing-admin-display","12.admin-site/04.customizing-admin-display",{"title":507,"path":508,"stem":509},"Admin Actions","/admin-site/admin-actions","12.admin-site/05.admin-actions",{"title":511,"path":512,"stem":513},"Admin Security Best Practices","/admin-site/admin-security-best-practices","12.admin-site/06.admin-security-best-practices",{"title":515,"path":516,"stem":517,"children":518},"Middleware","/middleware","13.middleware/01.index",[519,520,524,528,532,536],{"title":515,"path":516,"stem":517},{"title":521,"path":522,"stem":523},"Middleware Overview","/middleware/middleware-overview","13.middleware/02.middleware-overview",{"title":525,"path":526,"stem":527},"Built-in Middleware","/middleware/built-in-middleware","13.middleware/03.built-in-middleware",{"title":529,"path":530,"stem":531},"Creating Custom Middleware","/middleware/creating-custom-middleware","13.middleware/04.creating-custom-middleware",{"title":533,"path":534,"stem":535},"Middleware Ordering","/middleware/middleware-ordering","13.middleware/05.middleware-ordering",{"title":537,"path":538,"stem":539},"Performance and Debugging","/middleware/performance-and-debugging","13.middleware/06.performance-and-debugging",{"title":541,"path":542,"stem":543,"children":544},"Security","/security","14.security/01.index",[545,546,550,554,558,562,566,570,574],{"title":541,"path":542,"stem":543},{"title":547,"path":548,"stem":549},"Django Security Philosophy","/security/django-security-philosophy","14.security/02.django-security-philosophy",{"title":551,"path":552,"stem":553},"Cross Site Request Forgery","/security/cross-site-request-forgery","14.security/03.cross-site-request-forgery",{"title":555,"path":556,"stem":557},"Cross Site Scripting","/security/cross-site-scripting","14.security/04.cross-site-scripting",{"title":559,"path":560,"stem":561},"SQL Injection Protection","/security/sql-injection-protection","14.security/05.sql-injection-protection",{"title":563,"path":564,"stem":565},"Clickjacking Protection","/security/clickjacking-protection","14.security/06.clickjacking-protection",{"title":567,"path":568,"stem":569},"HTTPS Setup and HSTS","/security/https-setup-and-hsts","14.security/07.https-setup-and-hsts",{"title":571,"path":572,"stem":573},"Password Storage and Cryptography","/security/password-storage-and-cryptography","14.security/08.password-storage-and-cryptography",{"title":575,"path":576,"stem":577},"Secure Deployment Checklist","/security/secure-deployment-checklist","14.security/09.secure-deployment-checklist",{"title":579,"path":580,"stem":581,"children":582},"Testing","/testing","15.testing/01.index",[583,584,588,592,596,600,604,608,612,616,620],{"title":579,"path":580,"stem":581},{"title":585,"path":586,"stem":587},"Introduction to Django Testing","/testing/introduction-to-django-testing","15.testing/02.introduction-to-django-testing",{"title":589,"path":590,"stem":591},"Writing and Running Tests","/testing/writing-and-running-tests","15.testing/03.writing-and-running-tests",{"title":593,"path":594,"stem":595},"Test Tools","/testing/test-tools","15.testing/04.test-tools",{"title":597,"path":598,"stem":599},"Testing Models","/testing/testing-models","15.testing/05.testing-models",{"title":601,"path":602,"stem":603},"Testing Views","/testing/testing-views","15.testing/06.testing-views",{"title":605,"path":606,"stem":607},"Testing Forms","/testing/testing-forms","15.testing/07.testing-forms",{"title":609,"path":610,"stem":611},"Testing Templates","/testing/testing-templates","15.testing/08.testing-templates",{"title":613,"path":614,"stem":615},"Testing Authentication","/testing/testing-authentication","15.testing/09.testing-authentication",{"title":617,"path":618,"stem":619},"Advanced Testing Topics","/testing/advanced-testing-topics","15.testing/10.advanced-testing-topics",{"title":621,"path":622,"stem":623},"Performance Testing","/testing/performance-testing","15.testing/11.performance-testing",{"title":625,"path":626,"stem":627,"children":628},"Static Assets and Frontend Integration","/static-assets-and-frontend-integration","16.static-assets-and-frontend-integration/01.index",[629,630,634,638,642,646],{"title":625,"path":626,"stem":627},{"title":631,"path":632,"stem":633},"Working with Static Files","/static-assets-and-frontend-integration/working-with-static-files","16.static-assets-and-frontend-integration/02.working-with-static-files",{"title":635,"path":636,"stem":637},"Integrating CSS and JavaScript","/static-assets-and-frontend-integration/integrating-css-and-javascript","16.static-assets-and-frontend-integration/03.integrating-css-and-javascript",{"title":639,"path":640,"stem":641},"Using Build Tools like Vite or Webpack","/static-assets-and-frontend-integration/using-build-tools-like-vite-or-webpack","16.static-assets-and-frontend-integration/04.using-build-tools-like-vite-or-webpack",{"title":643,"path":644,"stem":645},"Using React or Vue with Django","/static-assets-and-frontend-integration/using-react-or-vue-with-django","16.static-assets-and-frontend-integration/05.using-react-or-vue-with-django",{"title":647,"path":648,"stem":649},"Managing CORS","/static-assets-and-frontend-integration/managing-cors","16.static-assets-and-frontend-integration/06.managing-cors",{"title":651,"path":652,"stem":653,"children":654},"Internationalization and Localization","/internationalization-and-localization","17.internationalization-and-localization/01.index",[655,656,660,664,668],{"title":651,"path":652,"stem":653},{"title":657,"path":658,"stem":659},"Enabling Translation","/internationalization-and-localization/enabling-translation","17.internationalization-and-localization/02.enabling-translation",{"title":661,"path":662,"stem":663},"Translating Text in Code and Templates","/internationalization-and-localization/translating-text-in-code-and-templates","17.internationalization-and-localization/03.translating-text-in-code-and-templates",{"title":665,"path":666,"stem":667},"Timezone Support","/internationalization-and-localization/timezone-support","17.internationalization-and-localization/04.timezone-support",{"title":669,"path":670,"stem":671},"Locale Middleware","/internationalization-and-localization/locale-middleware","17.internationalization-and-localization/05.locale-middleware",{"title":673,"path":674,"stem":675,"children":676},"Caching","/caching","18.caching/01.index",[677,678,682,686,690,694,698],{"title":673,"path":674,"stem":675},{"title":679,"path":680,"stem":681},"Introduction to Caching","/caching/introduction-to-caching","18.caching/02.introduction-to-caching",{"title":683,"path":684,"stem":685},"Cache Backends","/caching/cache-backends","18.caching/03.cache-backends",{"title":687,"path":688,"stem":689},"Per View Caching","/caching/per-view-caching","18.caching/04.per-view-caching",{"title":691,"path":692,"stem":693},"Low Level Cache API","/caching/low-level-cache-api","18.caching/05.low-level-cache-api",{"title":695,"path":696,"stem":697},"Template Fragment Caching","/caching/template-fragment-caching","18.caching/06.template-fragment-caching",{"title":699,"path":700,"stem":701},"Deployment Level Caching Patterns","/caching/deployment-level-caching-patterns","18.caching/07.deployment-level-caching-patterns",{"title":703,"path":704,"stem":705,"children":706},"Asynchronous Django","/asynchronous-django","19.asynchronous-django/01.index",[707,708,712,716,720,724,728,732],{"title":703,"path":704,"stem":705},{"title":709,"path":710,"stem":711},"Introduction to ASGI","/asynchronous-django/introduction-to-asgi","19.asynchronous-django/02.introduction-to-asgi",{"title":713,"path":714,"stem":715},"Async Views","/asynchronous-django/async-views","19.asynchronous-django/03.async-views",{"title":717,"path":718,"stem":719},"Async ORM Status","/asynchronous-django/async-orm-status","19.asynchronous-django/04.async-orm-status",{"title":721,"path":722,"stem":723},"WebSockets with Channels","/asynchronous-django/websockets-with-channels","19.asynchronous-django/05.websockets-with-channels",{"title":725,"path":726,"stem":727},"Background Tasks with Celery or RQ","/asynchronous-django/background-tasks-with-celery-or-rq","19.asynchronous-django/06.background-tasks-with-celery-or-rq",{"title":729,"path":730,"stem":731},"Asynchronous Support","/asynchronous-django/asynchronous-support","19.asynchronous-django/07.asynchronous-support",{"title":733,"path":734,"stem":735},"Django's Tasks Framework","/asynchronous-django/django-tasks-framework","19.asynchronous-django/08.django-tasks-framework",{"title":737,"path":738,"stem":739,"children":740},"Deployment","/deployment","20.deployment/01.index",[741,742,746,750,754,758,762,766,770],{"title":737,"path":738,"stem":739},{"title":743,"path":744,"stem":745},"Preparing for Production","/deployment/preparing-for-production","20.deployment/02.preparing-for-production",{"title":747,"path":748,"stem":749},"Using WSGI and ASGI Servers","/deployment/using-wsgi-and-asgi-servers","20.deployment/03.using-wsgi-and-asgi-servers",{"title":751,"path":752,"stem":753},"Deploying on Linux Servers","/deployment/deploying-on-linux-servers","20.deployment/04.deploying-on-linux-servers",{"title":755,"path":756,"stem":757},"Using Docker","/deployment/using-docker","20.deployment/05.using-docker",{"title":759,"path":760,"stem":761},"Cloud Deployment Guides","/deployment/cloud-deployment-guides","20.deployment/06.cloud-deployment-guides",{"title":763,"path":764,"stem":765},"Scaling and Load Balancing","/deployment/scaling-and-load-balancing","20.deployment/07.scaling-and-load-balancing",{"title":767,"path":768,"stem":769},"Monitoring and Logging","/deployment/monitoring-and-logging","20.deployment/08.monitoring-and-logging",{"title":771,"path":772,"stem":773},"Backup Strategies","/deployment/backup-strategies","20.deployment/09.backup-strategies",{"title":775,"path":776,"stem":777,"children":778},"Performance and Optimization","/performance-and-optimization","21.performance-and-optimization/01.index",[779,780,784,788,792,796],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783},"Query Optimization","/performance-and-optimization/query-optimization","21.performance-and-optimization/02.query-optimization",{"title":785,"path":786,"stem":787},"Template Rendering Optimization","/performance-and-optimization/template-rendering-optimization","21.performance-and-optimization/03.template-rendering-optimization",{"title":789,"path":790,"stem":791},"Using Select Related and Prefetch Related","/performance-and-optimization/using-select-related-and-prefetch-related","21.performance-and-optimization/04.using-select-related-and-prefetch-related",{"title":793,"path":794,"stem":795},"Caching Strategies","/performance-and-optimization/caching-strategies","21.performance-and-optimization/05.caching-strategies",{"title":797,"path":798,"stem":799},"Profiling Django Apps","/performance-and-optimization/profiling-django-apps","21.performance-and-optimization/06.profiling-django-apps",{"title":801,"path":802,"stem":803,"children":804},"Advanced and Expert Topics","/advanced-and-expert-topics","22.advanced-and-expert-topics/01.index",[805,806,810,814,818,822,826,830,834,838,842,846],{"title":801,"path":802,"stem":803},{"title":807,"path":808,"stem":809},"System Architecture Patterns","/advanced-and-expert-topics/system-architecture-patterns","22.advanced-and-expert-topics/02.system-architecture-patterns",{"title":811,"path":812,"stem":813},"Domain Driven Design with Django","/advanced-and-expert-topics/domain-driven-design-with-django","22.advanced-and-expert-topics/03.domain-driven-design-with-django",{"title":815,"path":816,"stem":817},"Building Large Scale Django Projects","/advanced-and-expert-topics/building-large-scale-django-projects","22.advanced-and-expert-topics/04.building-large-scale-django-projects",{"title":819,"path":820,"stem":821},"Plugin Architectures for Django Apps","/advanced-and-expert-topics/plugin-architectures-for-django-apps","22.advanced-and-expert-topics/05.plugin-architectures-for-django-apps",{"title":823,"path":824,"stem":825},"Extending Django's Core","/advanced-and-expert-topics/extending-djangos-core","22.advanced-and-expert-topics/06.extending-djangos-core",{"title":827,"path":828,"stem":829},"Custom ORM Expressions","/advanced-and-expert-topics/custom-orm-expressions","22.advanced-and-expert-topics/07.custom-orm-expressions",{"title":831,"path":832,"stem":833},"Custom Management Commands","/advanced-and-expert-topics/custom-management-commands","22.advanced-and-expert-topics/08.custom-management-commands",{"title":835,"path":836,"stem":837},"Working with Signals","/advanced-and-expert-topics/working-with-signals","22.advanced-and-expert-topics/09.working-with-signals",{"title":839,"path":840,"stem":841},"Building Reusable Django Packages","/advanced-and-expert-topics/building-reusable-django-packages","22.advanced-and-expert-topics/10.building-reusable-django-packages",{"title":843,"path":844,"stem":845},"Integrating Microservices","/advanced-and-expert-topics/integrating-microservices","22.advanced-and-expert-topics/11.integrating-microservices",{"title":847,"path":848,"stem":849},"Advanced Security Hardening","/advanced-and-expert-topics/advanced-security-hardening","22.advanced-and-expert-topics/12.advanced-security-hardening",{"title":851,"path":852,"stem":853,"children":854},"Logging in Django","/logging-in-django","23.logging-in-django/01.index",[855],{"title":851,"path":852,"stem":853},{"title":857,"path":858,"stem":859,"children":860},"FAQ and Troubleshooting","/faq-and-troubleshooting","24.faq-and-troubleshooting/01.index",[861],{"title":857,"path":858,"stem":859},{"title":863,"path":864,"stem":865,"children":866},"External Packages and Ecosystem","/external-packages-and-ecosystem","25.external-packages-and-ecosystem/01.index",[867],{"title":863,"path":864,"stem":865},{"title":869,"path":870,"stem":871,"children":872},"Django Internals and Contributing","/django-internals-and-contributing","26.django-internals-and-contributing/01.index",[873],{"title":869,"path":870,"stem":871},{"title":875,"path":876,"stem":877,"children":878},"Microservices with Django","/microservices-with-django","27.microservices-with-django/01.index",[879,880,884,888,892,896,900,904,908,912,916,920,924],{"title":875,"path":876,"stem":877},{"title":881,"path":882,"stem":883},"What Is a Microservice?","/microservices-with-django/what-is-a-microservice","27.microservices-with-django/02.what-is-a-microservice",{"title":885,"path":886,"stem":887},"Introducing the Django Microservices Architecture","/microservices-with-django/django-microservices-architecture","27.microservices-with-django/03.django-microservices-architecture",{"title":889,"path":890,"stem":891},"Setting Up the Development and Runtime Environment","/microservices-with-django/development-environment","27.microservices-with-django/04.development-environment",{"title":893,"path":894,"stem":895},"Cloud-native Data Processing with MongoDB","/microservices-with-django/cloud-native-data-processing","27.microservices-with-django/05.cloud-native-data-processing",{"title":897,"path":898,"stem":899},"Creating RESTful APIs for Microservices","/microservices-with-django/restful-apis","27.microservices-with-django/06.restful-apis",{"title":901,"path":902,"stem":903},"Orchestrating Microservices with Celery and RabbitMQ","/microservices-with-django/orchestrating-celery-rabbitmq","27.microservices-with-django/07.orchestrating-celery-rabbitmq",{"title":905,"path":906,"stem":907},"Testing Microservices","/microservices-with-django/testing-microservices","27.microservices-with-django/08.testing-microservices",{"title":909,"path":910,"stem":911},"Deploying Microservices","/microservices-with-django/deploying-microservices","27.microservices-with-django/09.deploying-microservices",{"title":913,"path":914,"stem":915},"Securing Microservices","/microservices-with-django/securing-microservices","27.microservices-with-django/10.securing-microservices",{"title":917,"path":918,"stem":919},"Improving Microservices Performance with Caching","/microservices-with-django/performance-caching","27.microservices-with-django/11.performance-caching",{"title":921,"path":922,"stem":923},"Best Practices","/microservices-with-django/best-practices","27.microservices-with-django/12.best-practices",{"title":925,"path":926,"stem":927},"Transforming a Monolithic Web App into a Microservice version","/microservices-with-django/monolith-to-microservices","27.microservices-with-django/13.monolith-to-microservices",{"title":929,"path":930,"stem":931,"children":932},"Releases","/releases","releases",[933,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012],{"title":934,"path":930,"stem":935},"Django Releases","releases/index",{"title":937,"path":938,"stem":939},"Django 5.1.10 release notes","/releases/5.1.10","releases/5.1.10",{"title":941,"path":942,"stem":943},"Django 5.1.11 release notes","/releases/5.1.11","releases/5.1.11",{"title":945,"path":946,"stem":947},"Django 5.1.12 release notes","/releases/5.1.12","releases/5.1.12",{"title":949,"path":950,"stem":951},"Django 5.1.13 release notes","/releases/5.1.13","releases/5.1.13",{"title":953,"path":954,"stem":955},"Django 5.1.14 release notes","/releases/5.1.14","releases/5.1.14",{"title":957,"path":958,"stem":959},"Django 5.1.15 release notes","/releases/5.1.15","releases/5.1.15",{"title":961,"path":962,"stem":963},"Django 5.2 release notes","/releases/5.2","releases/5.2",{"title":965,"path":966,"stem":967},"Django 5.2.1 release notes","/releases/5.2.1","releases/5.2.1",{"title":969,"path":970,"stem":971},"Django 5.2.10 release notes","/releases/5.2.10","releases/5.2.10",{"title":973,"path":974,"stem":975},"Django 5.2.2 release notes","/releases/5.2.2","releases/5.2.2",{"title":977,"path":978,"stem":979},"Django 5.2.3 release notes","/releases/5.2.3","releases/5.2.3",{"title":981,"path":982,"stem":983},"Django 5.2.4 release notes","/releases/5.2.4","releases/5.2.4",{"title":985,"path":986,"stem":987},"Django 5.2.5 release notes","/releases/5.2.5","releases/5.2.5",{"title":989,"path":990,"stem":991},"Django 5.2.6 release notes","/releases/5.2.6","releases/5.2.6",{"title":993,"path":994,"stem":995},"Django 5.2.7 release notes","/releases/5.2.7","releases/5.2.7",{"title":997,"path":998,"stem":999},"Django 5.2.8 release notes","/releases/5.2.8","releases/5.2.8",{"title":1001,"path":1002,"stem":1003},"Django 5.2.9 release notes","/releases/5.2.9","releases/5.2.9",{"title":1005,"path":1006,"stem":1007},"Django 6.0 release notes","/releases/6.0","releases/6.0",{"title":1009,"path":1010,"stem":1011},"Django 6.0.1 release notes","/releases/6.0.1","releases/6.0.1",{"title":1013,"path":1014,"stem":1015},"Django 6.1 release notes - UNDER DEVELOPMENT","/releases/6.1","releases/6.1",{"id":1017,"title":316,"body":1018,"description":1028,"extension":13085,"links":13086,"meta":13087,"navigation":1082,"path":317,"seo":13088,"stem":318,"__hash__":13089},"docs/07.models-and-databases/16.database-instrumentation.md",{"type":1019,"value":1020,"toc":13076},"minimark",[1021,1025,1029,1034,1039,4441,4445,6862,6866,6870,13070,13073],[1022,1023,316],"h1",{"id":1024},"database-instrumentation",[1026,1027,1028],"p",{},"Database instrumentation provides visibility into your application's database performance, helping you identify bottlenecks, monitor query patterns, and optimize database operations. Understanding how to implement comprehensive monitoring enables proactive performance management.",[1030,1031,1033],"h2",{"id":1032},"query-monitoring-and-logging","Query Monitoring and Logging",[1035,1036,1038],"h3",{"id":1037},"advanced-query-logging","Advanced Query Logging",[1040,1041,1046],"pre",{"className":1042,"code":1043,"language":1044,"meta":1045,"style":1045},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# settings.py - Enhanced logging configuration\nimport logging.config\n\nLOGGING = {\n    'version': 1,\n    'disable_existing_loggers': False,\n    'formatters': {\n        'verbose': {\n            'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',\n            'style': '{',\n        },\n        'query': {\n            'format': '[{asctime}] {name} {levelname} - Duration: {duration}ms - {sql}',\n            'style': '{',\n        },\n    },\n    'handlers': {\n        'console': {\n            'class': 'logging.StreamHandler',\n            'formatter': 'verbose',\n        },\n        'query_file': {\n            'class': 'logging.handlers.RotatingFileHandler',\n            'filename': 'logs/queries.log',\n            'maxBytes': 1024*1024*50,  # 50MB\n            'backupCount': 5,\n            'formatter': 'query',\n        },\n        'slow_query_file': {\n            'class': 'logging.handlers.RotatingFileHandler',\n            'filename': 'logs/slow_queries.log',\n            'maxBytes': 1024*1024*10,  # 10MB\n            'backupCount': 3,\n            'formatter': 'query',\n        },\n    },\n    'loggers': {\n        'django.db.backends': {\n            'handlers': ['query_file'],\n            'level': 'DEBUG',\n            'propagate': False,\n        },\n        'slow_queries': {\n            'handlers': ['slow_query_file'],\n            'level': 'WARNING',\n            'propagate': False,\n        },\n    },\n}\n\n# Custom database instrumentation\nimport time\nimport logging\nfrom django.db import connection\nfrom django.conf import settings\n\nclass DatabaseInstrumentation:\n    \"\"\"Comprehensive database instrumentation\"\"\"\n    \n    def __init__(self):\n        self.query_logger = logging.getLogger('django.db.backends')\n        self.slow_query_logger = logging.getLogger('slow_queries')\n        self.slow_query_threshold = getattr(settings, 'SLOW_QUERY_THRESHOLD', 0.1)  # 100ms\n    \n    def log_query(self, query, duration, params=None):\n        \"\"\"Log query with performance metrics\"\"\"\n        \n        log_data = {\n            'sql': query,\n            'duration': f\"{duration*1000:.2f}\",\n            'params': params,\n        }\n        \n        if duration > self.slow_query_threshold:\n            self.slow_query_logger.warning(\n                f\"Slow query detected - Duration: {duration*1000:.2f}ms - {query[:100]}...\",\n                extra=log_data\n            )\n        \n        self.query_logger.debug(\n            f\"Query executed - Duration: {duration*1000:.2f}ms\",\n            extra=log_data\n        )\n    \n    def analyze_query_patterns(self):\n        \"\"\"Analyze query patterns from logs\"\"\"\n        \n        query_patterns = {}\n        \n        for query_data in connection.queries:\n            sql = query_data['sql']\n            duration = float(query_data['time'])\n            \n            # Extract query pattern (remove specific values)\n            pattern = self.extract_query_pattern(sql)\n            \n            if pattern not in query_patterns:\n                query_patterns[pattern] = {\n                    'count': 0,\n                    'total_time': 0,\n                    'max_time': 0,\n                    'min_time': float('inf'),\n                }\n            \n            stats = query_patterns[pattern]\n            stats['count'] += 1\n            stats['total_time'] += duration\n            stats['max_time'] = max(stats['max_time'], duration)\n            stats['min_time'] = min(stats['min_time'], duration)\n        \n        # Calculate averages and identify problematic patterns\n        for pattern, stats in query_patterns.items():\n            stats['avg_time'] = stats['total_time'] / stats['count']\n            stats['is_problematic'] = (\n                stats['count'] > 10 and stats['avg_time'] > self.slow_query_threshold\n            )\n        \n        return query_patterns\n    \n    def extract_query_pattern(self, sql):\n        \"\"\"Extract query pattern by removing specific values\"\"\"\n        import re\n        \n        # Replace string literals\n        pattern = re.sub(r\"'[^']*'\", \"'?'\", sql)\n        \n        # Replace numeric literals\n        pattern = re.sub(r'\\b\\d+\\b', '?', pattern)\n        \n        # Replace IN clauses with multiple values\n        pattern = re.sub(r'IN \\([^)]+\\)', 'IN (?)', pattern)\n        \n        # Normalize whitespace\n        pattern = ' '.join(pattern.split())\n        \n        return pattern\n\n# Query performance middleware\nclass QueryPerformanceMiddleware:\n    \"\"\"Middleware to track query performance per request\"\"\"\n    \n    def __init__(self, get_response):\n        self.get_response = get_response\n        self.instrumentation = DatabaseInstrumentation()\n    \n    def __call__(self, request):\n        # Reset query log\n        connection.queries_log.clear()\n        \n        start_time = time.time()\n        response = self.get_response(request)\n        end_time = time.time()\n        \n        # Analyze request performance\n        self.analyze_request_performance(request, start_time, end_time)\n        \n        return response\n    \n    def analyze_request_performance(self, request, start_time, end_time):\n        \"\"\"Analyze performance metrics for the request\"\"\"\n        \n        total_queries = len(connection.queries)\n        total_query_time = sum(float(q['time']) for q in connection.queries)\n        request_time = end_time - start_time\n        \n        # Log performance metrics\n        performance_data = {\n            'path': request.path,\n            'method': request.method,\n            'query_count': total_queries,\n            'query_time': f\"{total_query_time*1000:.2f}ms\",\n            'request_time': f\"{request_time*1000:.2f}ms\",\n            'query_percentage': f\"{(total_query_time/request_time)*100:.1f}%\",\n        }\n        \n        # Detect N+1 queries\n        n_plus_one_patterns = self.detect_n_plus_one()\n        if n_plus_one_patterns:\n            performance_data['n_plus_one_detected'] = n_plus_one_patterns\n        \n        # Log if performance is concerning\n        if total_queries > 20 or total_query_time > 0.5 or request_time > 2.0:\n            logging.getLogger('performance').warning(\n                f\"Performance concern for {request.path}\",\n                extra=performance_data\n            )\n        \n        # Store metrics for monitoring\n        self.store_performance_metrics(performance_data)\n    \n    def detect_n_plus_one(self):\n        \"\"\"Detect potential N+1 query patterns\"\"\"\n        \n        query_patterns = {}\n        \n        for query_data in connection.queries:\n            pattern = self.instrumentation.extract_query_pattern(query_data['sql'])\n            query_patterns[pattern] = query_patterns.get(pattern, 0) + 1\n        \n        # Return patterns that appear more than 5 times\n        return {\n            pattern: count \n            for pattern, count in query_patterns.items() \n            if count > 5\n        }\n    \n    def store_performance_metrics(self, metrics):\n        \"\"\"Store performance metrics for analysis\"\"\"\n        \n        # Store in cache for real-time monitoring\n        from django.core.cache import cache\n        \n        cache_key = f\"perf_metrics_{int(time.time())}\"\n        cache.set(cache_key, metrics, timeout=3600)\n        \n        # Store in database for historical analysis\n        try:\n            from .models import PerformanceMetric\n            PerformanceMetric.objects.create(**metrics)\n        except Exception:\n            pass  # Don't fail request if metrics storage fails\n","python","",[1047,1048,1049,1058,1077,1084,1097,1121,1139,1153,1168,1218,1239,1245,1259,1303,1322,1327,1333,1347,1361,1382,1402,1407,1421,1441,1462,1495,1512,1531,1536,1550,1569,1589,1616,1632,1651,1656,1661,1675,1689,1712,1733,1749,1754,1768,1789,1809,1824,1829,1834,1840,1845,1851,1859,1867,1886,1903,1908,1920,1934,1940,1960,1992,2020,2060,2065,2102,2113,2119,2129,2145,2181,2197,2203,2208,2229,2247,2290,2302,2308,2313,2329,2355,2365,2371,2376,2390,2400,2405,2416,2421,2443,2465,2494,2500,2506,2527,2532,2552,2569,2587,2603,2619,2645,2651,2656,2672,2694,2714,2754,2792,2797,2803,2828,2874,2895,2941,2946,2951,2960,2965,2984,2994,3003,3008,3014,3074,3079,3085,3131,3136,3142,3198,3203,3209,3237,3242,3250,3255,3261,3271,3281,3286,3304,3319,3336,3341,3360,3366,3384,3389,3406,3427,3443,3448,3454,3480,3485,3493,3498,3524,3534,3539,3561,3609,3626,3631,3637,3647,3667,3687,3704,3737,3769,3812,3817,3822,3828,3845,3855,3877,3882,3888,3924,3950,3972,3982,3987,3992,3998,4015,4020,4034,4044,4049,4058,4063,4080,4111,4147,4152,4158,4165,4176,4203,4215,4220,4225,4244,4254,4259,4265,4288,4293,4327,4359,4364,4370,4378,4395,4421,4432],"code",{"__ignoreMap":1045},[1050,1051,1054],"span",{"class":1052,"line":1053},"line",1,[1050,1055,1057],{"class":1056},"s9Tkl","# settings.py - Enhanced logging configuration\n",[1050,1059,1061,1065,1069,1073],{"class":1052,"line":1060},2,[1050,1062,1064],{"class":1063},"siDh9","import",[1050,1066,1068],{"class":1067},"sftqT"," logging",[1050,1070,1072],{"class":1071},"soVBu",".",[1050,1074,1076],{"class":1075},"sBPpx","config\n",[1050,1078,1080],{"class":1052,"line":1079},3,[1050,1081,1083],{"emptyLinePlaceholder":1082},true,"\n",[1050,1085,1087,1091,1094],{"class":1052,"line":1086},4,[1050,1088,1090],{"class":1089},"se3Ec","LOGGING",[1050,1092,1093],{"class":1071}," =",[1050,1095,1096],{"class":1071}," {\n",[1050,1098,1100,1104,1108,1111,1114,1118],{"class":1052,"line":1099},5,[1050,1101,1103],{"class":1102},"sbYkP","    '",[1050,1105,1107],{"class":1106},"sTbE_","version",[1050,1109,1110],{"class":1102},"'",[1050,1112,1113],{"class":1071},":",[1050,1115,1117],{"class":1116},"s7CZa"," 1",[1050,1119,1120],{"class":1071},",\n",[1050,1122,1124,1126,1129,1131,1133,1137],{"class":1052,"line":1123},6,[1050,1125,1103],{"class":1102},[1050,1127,1128],{"class":1106},"disable_existing_loggers",[1050,1130,1110],{"class":1102},[1050,1132,1113],{"class":1071},[1050,1134,1136],{"class":1135},"s8XtY"," False",[1050,1138,1120],{"class":1071},[1050,1140,1142,1144,1147,1149,1151],{"class":1052,"line":1141},7,[1050,1143,1103],{"class":1102},[1050,1145,1146],{"class":1106},"formatters",[1050,1148,1110],{"class":1102},[1050,1150,1113],{"class":1071},[1050,1152,1096],{"class":1071},[1050,1154,1156,1159,1162,1164,1166],{"class":1052,"line":1155},8,[1050,1157,1158],{"class":1102},"        '",[1050,1160,1161],{"class":1106},"verbose",[1050,1163,1110],{"class":1102},[1050,1165,1113],{"class":1071},[1050,1167,1096],{"class":1071},[1050,1169,1171,1174,1177,1179,1181,1184,1188,1191,1194,1197,1201,1204,1207,1209,1211,1214,1216],{"class":1052,"line":1170},9,[1050,1172,1173],{"class":1102},"            '",[1050,1175,1176],{"class":1106},"format",[1050,1178,1110],{"class":1102},[1050,1180,1113],{"class":1071},[1050,1182,1183],{"class":1102}," '",[1050,1185,1187],{"class":1186},"s3h35","{levelname}",[1050,1189,1190],{"class":1186}," {asctime}",[1050,1192,1193],{"class":1186}," {module}",[1050,1195,1196],{"class":1186}," {process",[1050,1198,1200],{"class":1199},"s5Kfy",":d",[1050,1202,1203],{"class":1186},"}",[1050,1205,1206],{"class":1186}," {thread",[1050,1208,1200],{"class":1199},[1050,1210,1203],{"class":1186},[1050,1212,1213],{"class":1186}," {message}",[1050,1215,1110],{"class":1102},[1050,1217,1120],{"class":1071},[1050,1219,1221,1223,1226,1228,1230,1232,1235,1237],{"class":1052,"line":1220},10,[1050,1222,1173],{"class":1102},[1050,1224,1225],{"class":1106},"style",[1050,1227,1110],{"class":1102},[1050,1229,1113],{"class":1071},[1050,1231,1183],{"class":1102},[1050,1233,1234],{"class":1106},"{",[1050,1236,1110],{"class":1102},[1050,1238,1120],{"class":1071},[1050,1240,1242],{"class":1052,"line":1241},11,[1050,1243,1244],{"class":1071},"        },\n",[1050,1246,1248,1250,1253,1255,1257],{"class":1052,"line":1247},12,[1050,1249,1158],{"class":1102},[1050,1251,1252],{"class":1106},"query",[1050,1254,1110],{"class":1102},[1050,1256,1113],{"class":1071},[1050,1258,1096],{"class":1071},[1050,1260,1262,1264,1266,1268,1270,1272,1275,1278,1281,1284,1287,1290,1293,1296,1299,1301],{"class":1052,"line":1261},13,[1050,1263,1173],{"class":1102},[1050,1265,1176],{"class":1106},[1050,1267,1110],{"class":1102},[1050,1269,1113],{"class":1071},[1050,1271,1183],{"class":1102},[1050,1273,1274],{"class":1106},"[",[1050,1276,1277],{"class":1186},"{asctime}",[1050,1279,1280],{"class":1106},"] ",[1050,1282,1283],{"class":1186},"{name}",[1050,1285,1286],{"class":1186}," {levelname}",[1050,1288,1289],{"class":1106}," - Duration: ",[1050,1291,1292],{"class":1186},"{duration}",[1050,1294,1295],{"class":1106},"ms - ",[1050,1297,1298],{"class":1186},"{sql}",[1050,1300,1110],{"class":1102},[1050,1302,1120],{"class":1071},[1050,1304,1306,1308,1310,1312,1314,1316,1318,1320],{"class":1052,"line":1305},14,[1050,1307,1173],{"class":1102},[1050,1309,1225],{"class":1106},[1050,1311,1110],{"class":1102},[1050,1313,1113],{"class":1071},[1050,1315,1183],{"class":1102},[1050,1317,1234],{"class":1106},[1050,1319,1110],{"class":1102},[1050,1321,1120],{"class":1071},[1050,1323,1325],{"class":1052,"line":1324},15,[1050,1326,1244],{"class":1071},[1050,1328,1330],{"class":1052,"line":1329},16,[1050,1331,1332],{"class":1071},"    },\n",[1050,1334,1336,1338,1341,1343,1345],{"class":1052,"line":1335},17,[1050,1337,1103],{"class":1102},[1050,1339,1340],{"class":1106},"handlers",[1050,1342,1110],{"class":1102},[1050,1344,1113],{"class":1071},[1050,1346,1096],{"class":1071},[1050,1348,1350,1352,1355,1357,1359],{"class":1052,"line":1349},18,[1050,1351,1158],{"class":1102},[1050,1353,1354],{"class":1106},"console",[1050,1356,1110],{"class":1102},[1050,1358,1113],{"class":1071},[1050,1360,1096],{"class":1071},[1050,1362,1364,1366,1369,1371,1373,1375,1378,1380],{"class":1052,"line":1363},19,[1050,1365,1173],{"class":1102},[1050,1367,1368],{"class":1106},"class",[1050,1370,1110],{"class":1102},[1050,1372,1113],{"class":1071},[1050,1374,1183],{"class":1102},[1050,1376,1377],{"class":1106},"logging.StreamHandler",[1050,1379,1110],{"class":1102},[1050,1381,1120],{"class":1071},[1050,1383,1385,1387,1390,1392,1394,1396,1398,1400],{"class":1052,"line":1384},20,[1050,1386,1173],{"class":1102},[1050,1388,1389],{"class":1106},"formatter",[1050,1391,1110],{"class":1102},[1050,1393,1113],{"class":1071},[1050,1395,1183],{"class":1102},[1050,1397,1161],{"class":1106},[1050,1399,1110],{"class":1102},[1050,1401,1120],{"class":1071},[1050,1403,1405],{"class":1052,"line":1404},21,[1050,1406,1244],{"class":1071},[1050,1408,1410,1412,1415,1417,1419],{"class":1052,"line":1409},22,[1050,1411,1158],{"class":1102},[1050,1413,1414],{"class":1106},"query_file",[1050,1416,1110],{"class":1102},[1050,1418,1113],{"class":1071},[1050,1420,1096],{"class":1071},[1050,1422,1424,1426,1428,1430,1432,1434,1437,1439],{"class":1052,"line":1423},23,[1050,1425,1173],{"class":1102},[1050,1427,1368],{"class":1106},[1050,1429,1110],{"class":1102},[1050,1431,1113],{"class":1071},[1050,1433,1183],{"class":1102},[1050,1435,1436],{"class":1106},"logging.handlers.RotatingFileHandler",[1050,1438,1110],{"class":1102},[1050,1440,1120],{"class":1071},[1050,1442,1444,1446,1449,1451,1453,1455,1458,1460],{"class":1052,"line":1443},24,[1050,1445,1173],{"class":1102},[1050,1447,1448],{"class":1106},"filename",[1050,1450,1110],{"class":1102},[1050,1452,1113],{"class":1071},[1050,1454,1183],{"class":1102},[1050,1456,1457],{"class":1106},"logs/queries.log",[1050,1459,1110],{"class":1102},[1050,1461,1120],{"class":1071},[1050,1463,1465,1467,1470,1472,1474,1477,1481,1484,1486,1489,1492],{"class":1052,"line":1464},25,[1050,1466,1173],{"class":1102},[1050,1468,1469],{"class":1106},"maxBytes",[1050,1471,1110],{"class":1102},[1050,1473,1113],{"class":1071},[1050,1475,1476],{"class":1116}," 1024",[1050,1478,1480],{"class":1479},"sVsLi","*",[1050,1482,1483],{"class":1116},"1024",[1050,1485,1480],{"class":1479},[1050,1487,1488],{"class":1116},"50",[1050,1490,1491],{"class":1071},",",[1050,1493,1494],{"class":1056},"  # 50MB\n",[1050,1496,1498,1500,1503,1505,1507,1510],{"class":1052,"line":1497},26,[1050,1499,1173],{"class":1102},[1050,1501,1502],{"class":1106},"backupCount",[1050,1504,1110],{"class":1102},[1050,1506,1113],{"class":1071},[1050,1508,1509],{"class":1116}," 5",[1050,1511,1120],{"class":1071},[1050,1513,1515,1517,1519,1521,1523,1525,1527,1529],{"class":1052,"line":1514},27,[1050,1516,1173],{"class":1102},[1050,1518,1389],{"class":1106},[1050,1520,1110],{"class":1102},[1050,1522,1113],{"class":1071},[1050,1524,1183],{"class":1102},[1050,1526,1252],{"class":1106},[1050,1528,1110],{"class":1102},[1050,1530,1120],{"class":1071},[1050,1532,1534],{"class":1052,"line":1533},28,[1050,1535,1244],{"class":1071},[1050,1537,1539,1541,1544,1546,1548],{"class":1052,"line":1538},29,[1050,1540,1158],{"class":1102},[1050,1542,1543],{"class":1106},"slow_query_file",[1050,1545,1110],{"class":1102},[1050,1547,1113],{"class":1071},[1050,1549,1096],{"class":1071},[1050,1551,1553,1555,1557,1559,1561,1563,1565,1567],{"class":1052,"line":1552},30,[1050,1554,1173],{"class":1102},[1050,1556,1368],{"class":1106},[1050,1558,1110],{"class":1102},[1050,1560,1113],{"class":1071},[1050,1562,1183],{"class":1102},[1050,1564,1436],{"class":1106},[1050,1566,1110],{"class":1102},[1050,1568,1120],{"class":1071},[1050,1570,1572,1574,1576,1578,1580,1582,1585,1587],{"class":1052,"line":1571},31,[1050,1573,1173],{"class":1102},[1050,1575,1448],{"class":1106},[1050,1577,1110],{"class":1102},[1050,1579,1113],{"class":1071},[1050,1581,1183],{"class":1102},[1050,1583,1584],{"class":1106},"logs/slow_queries.log",[1050,1586,1110],{"class":1102},[1050,1588,1120],{"class":1071},[1050,1590,1592,1594,1596,1598,1600,1602,1604,1606,1608,1611,1613],{"class":1052,"line":1591},32,[1050,1593,1173],{"class":1102},[1050,1595,1469],{"class":1106},[1050,1597,1110],{"class":1102},[1050,1599,1113],{"class":1071},[1050,1601,1476],{"class":1116},[1050,1603,1480],{"class":1479},[1050,1605,1483],{"class":1116},[1050,1607,1480],{"class":1479},[1050,1609,1610],{"class":1116},"10",[1050,1612,1491],{"class":1071},[1050,1614,1615],{"class":1056},"  # 10MB\n",[1050,1617,1619,1621,1623,1625,1627,1630],{"class":1052,"line":1618},33,[1050,1620,1173],{"class":1102},[1050,1622,1502],{"class":1106},[1050,1624,1110],{"class":1102},[1050,1626,1113],{"class":1071},[1050,1628,1629],{"class":1116}," 3",[1050,1631,1120],{"class":1071},[1050,1633,1635,1637,1639,1641,1643,1645,1647,1649],{"class":1052,"line":1634},34,[1050,1636,1173],{"class":1102},[1050,1638,1389],{"class":1106},[1050,1640,1110],{"class":1102},[1050,1642,1113],{"class":1071},[1050,1644,1183],{"class":1102},[1050,1646,1252],{"class":1106},[1050,1648,1110],{"class":1102},[1050,1650,1120],{"class":1071},[1050,1652,1654],{"class":1052,"line":1653},35,[1050,1655,1244],{"class":1071},[1050,1657,1659],{"class":1052,"line":1658},36,[1050,1660,1332],{"class":1071},[1050,1662,1664,1666,1669,1671,1673],{"class":1052,"line":1663},37,[1050,1665,1103],{"class":1102},[1050,1667,1668],{"class":1106},"loggers",[1050,1670,1110],{"class":1102},[1050,1672,1113],{"class":1071},[1050,1674,1096],{"class":1071},[1050,1676,1678,1680,1683,1685,1687],{"class":1052,"line":1677},38,[1050,1679,1158],{"class":1102},[1050,1681,1682],{"class":1106},"django.db.backends",[1050,1684,1110],{"class":1102},[1050,1686,1113],{"class":1071},[1050,1688,1096],{"class":1071},[1050,1690,1692,1694,1696,1698,1700,1703,1705,1707,1709],{"class":1052,"line":1691},39,[1050,1693,1173],{"class":1102},[1050,1695,1340],{"class":1106},[1050,1697,1110],{"class":1102},[1050,1699,1113],{"class":1071},[1050,1701,1702],{"class":1071}," [",[1050,1704,1110],{"class":1102},[1050,1706,1414],{"class":1106},[1050,1708,1110],{"class":1102},[1050,1710,1711],{"class":1071},"],\n",[1050,1713,1715,1717,1720,1722,1724,1726,1729,1731],{"class":1052,"line":1714},40,[1050,1716,1173],{"class":1102},[1050,1718,1719],{"class":1106},"level",[1050,1721,1110],{"class":1102},[1050,1723,1113],{"class":1071},[1050,1725,1183],{"class":1102},[1050,1727,1728],{"class":1106},"DEBUG",[1050,1730,1110],{"class":1102},[1050,1732,1120],{"class":1071},[1050,1734,1736,1738,1741,1743,1745,1747],{"class":1052,"line":1735},41,[1050,1737,1173],{"class":1102},[1050,1739,1740],{"class":1106},"propagate",[1050,1742,1110],{"class":1102},[1050,1744,1113],{"class":1071},[1050,1746,1136],{"class":1135},[1050,1748,1120],{"class":1071},[1050,1750,1752],{"class":1052,"line":1751},42,[1050,1753,1244],{"class":1071},[1050,1755,1757,1759,1762,1764,1766],{"class":1052,"line":1756},43,[1050,1758,1158],{"class":1102},[1050,1760,1761],{"class":1106},"slow_queries",[1050,1763,1110],{"class":1102},[1050,1765,1113],{"class":1071},[1050,1767,1096],{"class":1071},[1050,1769,1771,1773,1775,1777,1779,1781,1783,1785,1787],{"class":1052,"line":1770},44,[1050,1772,1173],{"class":1102},[1050,1774,1340],{"class":1106},[1050,1776,1110],{"class":1102},[1050,1778,1113],{"class":1071},[1050,1780,1702],{"class":1071},[1050,1782,1110],{"class":1102},[1050,1784,1543],{"class":1106},[1050,1786,1110],{"class":1102},[1050,1788,1711],{"class":1071},[1050,1790,1792,1794,1796,1798,1800,1802,1805,1807],{"class":1052,"line":1791},45,[1050,1793,1173],{"class":1102},[1050,1795,1719],{"class":1106},[1050,1797,1110],{"class":1102},[1050,1799,1113],{"class":1071},[1050,1801,1183],{"class":1102},[1050,1803,1804],{"class":1106},"WARNING",[1050,1806,1110],{"class":1102},[1050,1808,1120],{"class":1071},[1050,1810,1812,1814,1816,1818,1820,1822],{"class":1052,"line":1811},46,[1050,1813,1173],{"class":1102},[1050,1815,1740],{"class":1106},[1050,1817,1110],{"class":1102},[1050,1819,1113],{"class":1071},[1050,1821,1136],{"class":1135},[1050,1823,1120],{"class":1071},[1050,1825,1827],{"class":1052,"line":1826},47,[1050,1828,1244],{"class":1071},[1050,1830,1832],{"class":1052,"line":1831},48,[1050,1833,1332],{"class":1071},[1050,1835,1837],{"class":1052,"line":1836},49,[1050,1838,1839],{"class":1071},"}\n",[1050,1841,1843],{"class":1052,"line":1842},50,[1050,1844,1083],{"emptyLinePlaceholder":1082},[1050,1846,1848],{"class":1052,"line":1847},51,[1050,1849,1850],{"class":1056},"# Custom database instrumentation\n",[1050,1852,1854,1856],{"class":1052,"line":1853},52,[1050,1855,1064],{"class":1063},[1050,1857,1858],{"class":1067}," time\n",[1050,1860,1862,1864],{"class":1052,"line":1861},53,[1050,1863,1064],{"class":1063},[1050,1865,1866],{"class":1067}," logging\n",[1050,1868,1870,1873,1876,1878,1881,1883],{"class":1052,"line":1869},54,[1050,1871,1872],{"class":1063},"from",[1050,1874,1875],{"class":1067}," django",[1050,1877,1072],{"class":1071},[1050,1879,1880],{"class":1067},"db ",[1050,1882,1064],{"class":1063},[1050,1884,1885],{"class":1067}," connection\n",[1050,1887,1889,1891,1893,1895,1898,1900],{"class":1052,"line":1888},55,[1050,1890,1872],{"class":1063},[1050,1892,1875],{"class":1067},[1050,1894,1072],{"class":1071},[1050,1896,1897],{"class":1067},"conf ",[1050,1899,1064],{"class":1063},[1050,1901,1902],{"class":1067}," settings\n",[1050,1904,1906],{"class":1052,"line":1905},56,[1050,1907,1083],{"emptyLinePlaceholder":1082},[1050,1909,1911,1913,1917],{"class":1052,"line":1910},57,[1050,1912,1368],{"class":1199},[1050,1914,1916],{"class":1915},"sD-vU"," DatabaseInstrumentation",[1050,1918,1919],{"class":1071},":\n",[1050,1921,1923,1927,1931],{"class":1052,"line":1922},58,[1050,1924,1926],{"class":1925},"sm7ve","    \"\"\"",[1050,1928,1930],{"class":1929},"sVyVU","Comprehensive database instrumentation",[1050,1932,1933],{"class":1925},"\"\"\"\n",[1050,1935,1937],{"class":1052,"line":1936},59,[1050,1938,1939],{"class":1067},"    \n",[1050,1941,1943,1946,1950,1953,1957],{"class":1052,"line":1942},60,[1050,1944,1945],{"class":1199},"    def",[1050,1947,1949],{"class":1948},"sJdAF"," __init__",[1050,1951,1952],{"class":1071},"(",[1050,1954,1956],{"class":1955},"sRjD_","self",[1050,1958,1959],{"class":1071},"):\n",[1050,1961,1963,1966,1968,1971,1973,1975,1977,1981,1983,1985,1987,1989],{"class":1052,"line":1962},61,[1050,1964,1965],{"class":1089},"        self",[1050,1967,1072],{"class":1071},[1050,1969,1970],{"class":1075},"query_logger",[1050,1972,1093],{"class":1071},[1050,1974,1068],{"class":1067},[1050,1976,1072],{"class":1071},[1050,1978,1980],{"class":1979},"siWMO","getLogger",[1050,1982,1952],{"class":1071},[1050,1984,1110],{"class":1102},[1050,1986,1682],{"class":1106},[1050,1988,1110],{"class":1102},[1050,1990,1991],{"class":1071},")\n",[1050,1993,1995,1997,1999,2002,2004,2006,2008,2010,2012,2014,2016,2018],{"class":1052,"line":1994},62,[1050,1996,1965],{"class":1089},[1050,1998,1072],{"class":1071},[1050,2000,2001],{"class":1075},"slow_query_logger",[1050,2003,1093],{"class":1071},[1050,2005,1068],{"class":1067},[1050,2007,1072],{"class":1071},[1050,2009,1980],{"class":1979},[1050,2011,1952],{"class":1071},[1050,2013,1110],{"class":1102},[1050,2015,1761],{"class":1106},[1050,2017,1110],{"class":1102},[1050,2019,1991],{"class":1071},[1050,2021,2023,2025,2027,2030,2032,2035,2037,2040,2042,2044,2047,2049,2051,2054,2057],{"class":1052,"line":2022},63,[1050,2024,1965],{"class":1089},[1050,2026,1072],{"class":1071},[1050,2028,2029],{"class":1075},"slow_query_threshold",[1050,2031,1093],{"class":1071},[1050,2033,2034],{"class":1948}," getattr",[1050,2036,1952],{"class":1071},[1050,2038,2039],{"class":1979},"settings",[1050,2041,1491],{"class":1071},[1050,2043,1183],{"class":1102},[1050,2045,2046],{"class":1106},"SLOW_QUERY_THRESHOLD",[1050,2048,1110],{"class":1102},[1050,2050,1491],{"class":1071},[1050,2052,2053],{"class":1116}," 0.1",[1050,2055,2056],{"class":1071},")",[1050,2058,2059],{"class":1056},"  # 100ms\n",[1050,2061,2063],{"class":1052,"line":2062},64,[1050,2064,1939],{"class":1067},[1050,2066,2068,2070,2074,2076,2078,2080,2084,2086,2089,2091,2094,2097,2100],{"class":1052,"line":2067},65,[1050,2069,1945],{"class":1199},[1050,2071,2073],{"class":2072},"sljsM"," log_query",[1050,2075,1952],{"class":1071},[1050,2077,1956],{"class":1955},[1050,2079,1491],{"class":1071},[1050,2081,2083],{"class":2082},"sCyAa"," query",[1050,2085,1491],{"class":1071},[1050,2087,2088],{"class":2082}," duration",[1050,2090,1491],{"class":1071},[1050,2092,2093],{"class":2082}," params",[1050,2095,2096],{"class":1479},"=",[1050,2098,2099],{"class":1135},"None",[1050,2101,1959],{"class":1071},[1050,2103,2105,2108,2111],{"class":1052,"line":2104},66,[1050,2106,2107],{"class":1925},"        \"\"\"",[1050,2109,2110],{"class":1929},"Log query with performance metrics",[1050,2112,1933],{"class":1925},[1050,2114,2116],{"class":1052,"line":2115},67,[1050,2117,2118],{"class":1067},"        \n",[1050,2120,2122,2125,2127],{"class":1052,"line":2121},68,[1050,2123,2124],{"class":1067},"        log_data ",[1050,2126,2096],{"class":1071},[1050,2128,1096],{"class":1071},[1050,2130,2132,2134,2137,2139,2141,2143],{"class":1052,"line":2131},69,[1050,2133,1173],{"class":1102},[1050,2135,2136],{"class":1106},"sql",[1050,2138,1110],{"class":1102},[1050,2140,1113],{"class":1071},[1050,2142,2083],{"class":1067},[1050,2144,1120],{"class":1071},[1050,2146,2148,2150,2153,2155,2157,2160,2163,2165,2167,2169,2172,2175,2177,2179],{"class":1052,"line":2147},70,[1050,2149,1173],{"class":1102},[1050,2151,2152],{"class":1106},"duration",[1050,2154,1110],{"class":1102},[1050,2156,1113],{"class":1071},[1050,2158,2159],{"class":1199}," f",[1050,2161,2162],{"class":1106},"\"",[1050,2164,1234],{"class":1186},[1050,2166,2152],{"class":1067},[1050,2168,1480],{"class":1479},[1050,2170,2171],{"class":1116},"1000",[1050,2173,2174],{"class":1199},":.2f",[1050,2176,1203],{"class":1186},[1050,2178,2162],{"class":1106},[1050,2180,1120],{"class":1071},[1050,2182,2184,2186,2189,2191,2193,2195],{"class":1052,"line":2183},71,[1050,2185,1173],{"class":1102},[1050,2187,2188],{"class":1106},"params",[1050,2190,1110],{"class":1102},[1050,2192,1113],{"class":1071},[1050,2194,2093],{"class":1067},[1050,2196,1120],{"class":1071},[1050,2198,2200],{"class":1052,"line":2199},72,[1050,2201,2202],{"class":1071},"        }\n",[1050,2204,2206],{"class":1052,"line":2205},73,[1050,2207,2118],{"class":1067},[1050,2209,2211,2214,2217,2220,2223,2225,2227],{"class":1052,"line":2210},74,[1050,2212,2213],{"class":1063},"        if",[1050,2215,2216],{"class":1067}," duration ",[1050,2218,2219],{"class":1479},">",[1050,2221,2222],{"class":1089}," self",[1050,2224,1072],{"class":1071},[1050,2226,2029],{"class":1075},[1050,2228,1919],{"class":1071},[1050,2230,2232,2235,2237,2239,2241,2244],{"class":1052,"line":2231},75,[1050,2233,2234],{"class":1089},"            self",[1050,2236,1072],{"class":1071},[1050,2238,2001],{"class":1075},[1050,2240,1072],{"class":1071},[1050,2242,2243],{"class":1979},"warning",[1050,2245,2246],{"class":1071},"(\n",[1050,2248,2250,2253,2256,2258,2260,2262,2264,2266,2268,2270,2272,2274,2277,2280,2283,2285,2288],{"class":1052,"line":2249},76,[1050,2251,2252],{"class":1199},"                f",[1050,2254,2255],{"class":1106},"\"Slow query detected - Duration: ",[1050,2257,1234],{"class":1186},[1050,2259,2152],{"class":1979},[1050,2261,1480],{"class":1479},[1050,2263,2171],{"class":1116},[1050,2265,2174],{"class":1199},[1050,2267,1203],{"class":1186},[1050,2269,1295],{"class":1106},[1050,2271,1234],{"class":1186},[1050,2273,1252],{"class":1979},[1050,2275,2276],{"class":1071},"[:",[1050,2278,2279],{"class":1116},"100",[1050,2281,2282],{"class":1071},"]",[1050,2284,1203],{"class":1186},[1050,2286,2287],{"class":1106},"...\"",[1050,2289,1120],{"class":1071},[1050,2291,2293,2297,2299],{"class":1052,"line":2292},77,[1050,2294,2296],{"class":2295},"sqOPj","                extra",[1050,2298,2096],{"class":1071},[1050,2300,2301],{"class":1979},"log_data\n",[1050,2303,2305],{"class":1052,"line":2304},78,[1050,2306,2307],{"class":1071},"            )\n",[1050,2309,2311],{"class":1052,"line":2310},79,[1050,2312,2118],{"class":1067},[1050,2314,2316,2318,2320,2322,2324,2327],{"class":1052,"line":2315},80,[1050,2317,1965],{"class":1089},[1050,2319,1072],{"class":1071},[1050,2321,1970],{"class":1075},[1050,2323,1072],{"class":1071},[1050,2325,2326],{"class":1979},"debug",[1050,2328,2246],{"class":1071},[1050,2330,2332,2335,2338,2340,2342,2344,2346,2348,2350,2353],{"class":1052,"line":2331},81,[1050,2333,2334],{"class":1199},"            f",[1050,2336,2337],{"class":1106},"\"Query executed - Duration: ",[1050,2339,1234],{"class":1186},[1050,2341,2152],{"class":1979},[1050,2343,1480],{"class":1479},[1050,2345,2171],{"class":1116},[1050,2347,2174],{"class":1199},[1050,2349,1203],{"class":1186},[1050,2351,2352],{"class":1106},"ms\"",[1050,2354,1120],{"class":1071},[1050,2356,2358,2361,2363],{"class":1052,"line":2357},82,[1050,2359,2360],{"class":2295},"            extra",[1050,2362,2096],{"class":1071},[1050,2364,2301],{"class":1979},[1050,2366,2368],{"class":1052,"line":2367},83,[1050,2369,2370],{"class":1071},"        )\n",[1050,2372,2374],{"class":1052,"line":2373},84,[1050,2375,1939],{"class":1067},[1050,2377,2379,2381,2384,2386,2388],{"class":1052,"line":2378},85,[1050,2380,1945],{"class":1199},[1050,2382,2383],{"class":2072}," analyze_query_patterns",[1050,2385,1952],{"class":1071},[1050,2387,1956],{"class":1955},[1050,2389,1959],{"class":1071},[1050,2391,2393,2395,2398],{"class":1052,"line":2392},86,[1050,2394,2107],{"class":1925},[1050,2396,2397],{"class":1929},"Analyze query patterns from logs",[1050,2399,1933],{"class":1925},[1050,2401,2403],{"class":1052,"line":2402},87,[1050,2404,2118],{"class":1067},[1050,2406,2408,2411,2413],{"class":1052,"line":2407},88,[1050,2409,2410],{"class":1067},"        query_patterns ",[1050,2412,2096],{"class":1071},[1050,2414,2415],{"class":1071}," {}\n",[1050,2417,2419],{"class":1052,"line":2418},89,[1050,2420,2118],{"class":1067},[1050,2422,2424,2427,2430,2433,2436,2438,2441],{"class":1052,"line":2423},90,[1050,2425,2426],{"class":1063},"        for",[1050,2428,2429],{"class":1067}," query_data ",[1050,2431,2432],{"class":1063},"in",[1050,2434,2435],{"class":1067}," connection",[1050,2437,1072],{"class":1071},[1050,2439,2440],{"class":1075},"queries",[1050,2442,1919],{"class":1071},[1050,2444,2446,2449,2451,2454,2456,2458,2460,2462],{"class":1052,"line":2445},91,[1050,2447,2448],{"class":1067},"            sql ",[1050,2450,2096],{"class":1071},[1050,2452,2453],{"class":1067}," query_data",[1050,2455,1274],{"class":1071},[1050,2457,1110],{"class":1102},[1050,2459,2136],{"class":1106},[1050,2461,1110],{"class":1102},[1050,2463,2464],{"class":1071},"]\n",[1050,2466,2468,2471,2473,2477,2479,2482,2484,2486,2489,2491],{"class":1052,"line":2467},92,[1050,2469,2470],{"class":1067},"            duration ",[1050,2472,2096],{"class":1071},[1050,2474,2476],{"class":2475},"sa2tF"," float",[1050,2478,1952],{"class":1071},[1050,2480,2481],{"class":1979},"query_data",[1050,2483,1274],{"class":1071},[1050,2485,1110],{"class":1102},[1050,2487,2488],{"class":1106},"time",[1050,2490,1110],{"class":1102},[1050,2492,2493],{"class":1071},"])\n",[1050,2495,2497],{"class":1052,"line":2496},93,[1050,2498,2499],{"class":1067},"            \n",[1050,2501,2503],{"class":1052,"line":2502},94,[1050,2504,2505],{"class":1056},"            # Extract query pattern (remove specific values)\n",[1050,2507,2509,2512,2514,2516,2518,2521,2523,2525],{"class":1052,"line":2508},95,[1050,2510,2511],{"class":1067},"            pattern ",[1050,2513,2096],{"class":1071},[1050,2515,2222],{"class":1089},[1050,2517,1072],{"class":1071},[1050,2519,2520],{"class":1979},"extract_query_pattern",[1050,2522,1952],{"class":1071},[1050,2524,2136],{"class":1979},[1050,2526,1991],{"class":1071},[1050,2528,2530],{"class":1052,"line":2529},96,[1050,2531,2499],{"class":1067},[1050,2533,2535,2538,2541,2544,2547,2550],{"class":1052,"line":2534},97,[1050,2536,2537],{"class":1063},"            if",[1050,2539,2540],{"class":1067}," pattern ",[1050,2542,2543],{"class":1479},"not",[1050,2545,2546],{"class":1479}," in",[1050,2548,2549],{"class":1067}," query_patterns",[1050,2551,1919],{"class":1071},[1050,2553,2555,2558,2560,2563,2565,2567],{"class":1052,"line":2554},98,[1050,2556,2557],{"class":1067},"                query_patterns",[1050,2559,1274],{"class":1071},[1050,2561,2562],{"class":1067},"pattern",[1050,2564,2282],{"class":1071},[1050,2566,1093],{"class":1071},[1050,2568,1096],{"class":1071},[1050,2570,2572,2575,2578,2580,2582,2585],{"class":1052,"line":2571},99,[1050,2573,2574],{"class":1102},"                    '",[1050,2576,2577],{"class":1106},"count",[1050,2579,1110],{"class":1102},[1050,2581,1113],{"class":1071},[1050,2583,2584],{"class":1116}," 0",[1050,2586,1120],{"class":1071},[1050,2588,2590,2592,2595,2597,2599,2601],{"class":1052,"line":2589},100,[1050,2591,2574],{"class":1102},[1050,2593,2594],{"class":1106},"total_time",[1050,2596,1110],{"class":1102},[1050,2598,1113],{"class":1071},[1050,2600,2584],{"class":1116},[1050,2602,1120],{"class":1071},[1050,2604,2606,2608,2611,2613,2615,2617],{"class":1052,"line":2605},101,[1050,2607,2574],{"class":1102},[1050,2609,2610],{"class":1106},"max_time",[1050,2612,1110],{"class":1102},[1050,2614,1113],{"class":1071},[1050,2616,2584],{"class":1116},[1050,2618,1120],{"class":1071},[1050,2620,2622,2624,2627,2629,2631,2633,2635,2637,2640,2642],{"class":1052,"line":2621},102,[1050,2623,2574],{"class":1102},[1050,2625,2626],{"class":1106},"min_time",[1050,2628,1110],{"class":1102},[1050,2630,1113],{"class":1071},[1050,2632,2476],{"class":2475},[1050,2634,1952],{"class":1071},[1050,2636,1110],{"class":1102},[1050,2638,2639],{"class":1106},"inf",[1050,2641,1110],{"class":1102},[1050,2643,2644],{"class":1071},"),\n",[1050,2646,2648],{"class":1052,"line":2647},103,[1050,2649,2650],{"class":1071},"                }\n",[1050,2652,2654],{"class":1052,"line":2653},104,[1050,2655,2499],{"class":1067},[1050,2657,2659,2662,2664,2666,2668,2670],{"class":1052,"line":2658},105,[1050,2660,2661],{"class":1067},"            stats ",[1050,2663,2096],{"class":1071},[1050,2665,2549],{"class":1067},[1050,2667,1274],{"class":1071},[1050,2669,2562],{"class":1067},[1050,2671,2464],{"class":1071},[1050,2673,2675,2678,2680,2682,2684,2686,2688,2691],{"class":1052,"line":2674},106,[1050,2676,2677],{"class":1067},"            stats",[1050,2679,1274],{"class":1071},[1050,2681,1110],{"class":1102},[1050,2683,2577],{"class":1106},[1050,2685,1110],{"class":1102},[1050,2687,2282],{"class":1071},[1050,2689,2690],{"class":1071}," +=",[1050,2692,2693],{"class":1116}," 1\n",[1050,2695,2697,2699,2701,2703,2705,2707,2709,2711],{"class":1052,"line":2696},107,[1050,2698,2677],{"class":1067},[1050,2700,1274],{"class":1071},[1050,2702,1110],{"class":1102},[1050,2704,2594],{"class":1106},[1050,2706,1110],{"class":1102},[1050,2708,2282],{"class":1071},[1050,2710,2690],{"class":1071},[1050,2712,2713],{"class":1067}," duration\n",[1050,2715,2717,2719,2721,2723,2725,2727,2729,2731,2734,2736,2739,2741,2743,2745,2747,2750,2752],{"class":1052,"line":2716},108,[1050,2718,2677],{"class":1067},[1050,2720,1274],{"class":1071},[1050,2722,1110],{"class":1102},[1050,2724,2610],{"class":1106},[1050,2726,1110],{"class":1102},[1050,2728,2282],{"class":1071},[1050,2730,1093],{"class":1071},[1050,2732,2733],{"class":1948}," max",[1050,2735,1952],{"class":1071},[1050,2737,2738],{"class":1979},"stats",[1050,2740,1274],{"class":1071},[1050,2742,1110],{"class":1102},[1050,2744,2610],{"class":1106},[1050,2746,1110],{"class":1102},[1050,2748,2749],{"class":1071},"],",[1050,2751,2088],{"class":1979},[1050,2753,1991],{"class":1071},[1050,2755,2757,2759,2761,2763,2765,2767,2769,2771,2774,2776,2778,2780,2782,2784,2786,2788,2790],{"class":1052,"line":2756},109,[1050,2758,2677],{"class":1067},[1050,2760,1274],{"class":1071},[1050,2762,1110],{"class":1102},[1050,2764,2626],{"class":1106},[1050,2766,1110],{"class":1102},[1050,2768,2282],{"class":1071},[1050,2770,1093],{"class":1071},[1050,2772,2773],{"class":1948}," min",[1050,2775,1952],{"class":1071},[1050,2777,2738],{"class":1979},[1050,2779,1274],{"class":1071},[1050,2781,1110],{"class":1102},[1050,2783,2626],{"class":1106},[1050,2785,1110],{"class":1102},[1050,2787,2749],{"class":1071},[1050,2789,2088],{"class":1979},[1050,2791,1991],{"class":1071},[1050,2793,2795],{"class":1052,"line":2794},110,[1050,2796,2118],{"class":1067},[1050,2798,2800],{"class":1052,"line":2799},111,[1050,2801,2802],{"class":1056},"        # Calculate averages and identify problematic patterns\n",[1050,2804,2806,2808,2811,2813,2816,2818,2820,2822,2825],{"class":1052,"line":2805},112,[1050,2807,2426],{"class":1063},[1050,2809,2810],{"class":1067}," pattern",[1050,2812,1491],{"class":1071},[1050,2814,2815],{"class":1067}," stats ",[1050,2817,2432],{"class":1063},[1050,2819,2549],{"class":1067},[1050,2821,1072],{"class":1071},[1050,2823,2824],{"class":1979},"items",[1050,2826,2827],{"class":1071},"():\n",[1050,2829,2831,2833,2835,2837,2840,2842,2844,2846,2849,2851,2853,2855,2857,2859,2862,2864,2866,2868,2870,2872],{"class":1052,"line":2830},113,[1050,2832,2677],{"class":1067},[1050,2834,1274],{"class":1071},[1050,2836,1110],{"class":1102},[1050,2838,2839],{"class":1106},"avg_time",[1050,2841,1110],{"class":1102},[1050,2843,2282],{"class":1071},[1050,2845,1093],{"class":1071},[1050,2847,2848],{"class":1067}," stats",[1050,2850,1274],{"class":1071},[1050,2852,1110],{"class":1102},[1050,2854,2594],{"class":1106},[1050,2856,1110],{"class":1102},[1050,2858,2282],{"class":1071},[1050,2860,2861],{"class":1479}," /",[1050,2863,2848],{"class":1067},[1050,2865,1274],{"class":1071},[1050,2867,1110],{"class":1102},[1050,2869,2577],{"class":1106},[1050,2871,1110],{"class":1102},[1050,2873,2464],{"class":1071},[1050,2875,2877,2879,2881,2883,2886,2888,2890,2892],{"class":1052,"line":2876},114,[1050,2878,2677],{"class":1067},[1050,2880,1274],{"class":1071},[1050,2882,1110],{"class":1102},[1050,2884,2885],{"class":1106},"is_problematic",[1050,2887,1110],{"class":1102},[1050,2889,2282],{"class":1071},[1050,2891,1093],{"class":1071},[1050,2893,2894],{"class":1071}," (\n",[1050,2896,2898,2901,2903,2905,2907,2909,2911,2914,2917,2920,2922,2924,2926,2928,2930,2932,2934,2936,2938],{"class":1052,"line":2897},115,[1050,2899,2900],{"class":1067},"                stats",[1050,2902,1274],{"class":1071},[1050,2904,1110],{"class":1102},[1050,2906,2577],{"class":1106},[1050,2908,1110],{"class":1102},[1050,2910,2282],{"class":1071},[1050,2912,2913],{"class":1479}," >",[1050,2915,2916],{"class":1116}," 10",[1050,2918,2919],{"class":1479}," and",[1050,2921,2848],{"class":1067},[1050,2923,1274],{"class":1071},[1050,2925,1110],{"class":1102},[1050,2927,2839],{"class":1106},[1050,2929,1110],{"class":1102},[1050,2931,2282],{"class":1071},[1050,2933,2913],{"class":1479},[1050,2935,2222],{"class":1089},[1050,2937,1072],{"class":1071},[1050,2939,2940],{"class":1075},"slow_query_threshold\n",[1050,2942,2944],{"class":1052,"line":2943},116,[1050,2945,2307],{"class":1071},[1050,2947,2949],{"class":1052,"line":2948},117,[1050,2950,2118],{"class":1067},[1050,2952,2954,2957],{"class":1052,"line":2953},118,[1050,2955,2956],{"class":1063},"        return",[1050,2958,2959],{"class":1067}," query_patterns\n",[1050,2961,2963],{"class":1052,"line":2962},119,[1050,2964,1939],{"class":1067},[1050,2966,2968,2970,2973,2975,2977,2979,2982],{"class":1052,"line":2967},120,[1050,2969,1945],{"class":1199},[1050,2971,2972],{"class":2072}," extract_query_pattern",[1050,2974,1952],{"class":1071},[1050,2976,1956],{"class":1955},[1050,2978,1491],{"class":1071},[1050,2980,2981],{"class":2082}," sql",[1050,2983,1959],{"class":1071},[1050,2985,2987,2989,2992],{"class":1052,"line":2986},121,[1050,2988,2107],{"class":1925},[1050,2990,2991],{"class":1929},"Extract query pattern by removing specific values",[1050,2993,1933],{"class":1925},[1050,2995,2997,3000],{"class":1052,"line":2996},122,[1050,2998,2999],{"class":1063},"        import",[1050,3001,3002],{"class":1067}," re\n",[1050,3004,3006],{"class":1052,"line":3005},123,[1050,3007,2118],{"class":1067},[1050,3009,3011],{"class":1052,"line":3010},124,[1050,3012,3013],{"class":1056},"        # Replace string literals\n",[1050,3015,3017,3020,3022,3025,3027,3030,3032,3035,3037,3040,3043,3046,3049,3051,3054,3056,3058,3060,3063,3066,3068,3070,3072],{"class":1052,"line":3016},125,[1050,3018,3019],{"class":1067},"        pattern ",[1050,3021,2096],{"class":1071},[1050,3023,3024],{"class":1067}," re",[1050,3026,1072],{"class":1071},[1050,3028,3029],{"class":1979},"sub",[1050,3031,1952],{"class":1071},[1050,3033,3034],{"class":1199},"r",[1050,3036,2162],{"class":1102},[1050,3038,1110],{"class":3039},"s27EL",[1050,3041,1274],{"class":3042},"sETVe",[1050,3044,3045],{"class":1479},"^",[1050,3047,1110],{"class":3048},"sz9Cv",[1050,3050,2282],{"class":3042},[1050,3052,1480],{"class":3053},"sGuSu",[1050,3055,1110],{"class":3039},[1050,3057,2162],{"class":1102},[1050,3059,1491],{"class":1071},[1050,3061,3062],{"class":1102}," \"",[1050,3064,3065],{"class":1106},"'?'",[1050,3067,2162],{"class":1102},[1050,3069,1491],{"class":1071},[1050,3071,2981],{"class":1979},[1050,3073,1991],{"class":1071},[1050,3075,3077],{"class":1052,"line":3076},126,[1050,3078,2118],{"class":1067},[1050,3080,3082],{"class":1052,"line":3081},127,[1050,3083,3084],{"class":1056},"        # Replace numeric literals\n",[1050,3086,3088,3090,3092,3094,3096,3098,3100,3102,3104,3108,3111,3114,3116,3118,3120,3123,3125,3127,3129],{"class":1052,"line":3087},128,[1050,3089,3019],{"class":1067},[1050,3091,2096],{"class":1071},[1050,3093,3024],{"class":1067},[1050,3095,1072],{"class":1071},[1050,3097,3029],{"class":1979},[1050,3099,1952],{"class":1071},[1050,3101,3034],{"class":1199},[1050,3103,1110],{"class":1102},[1050,3105,3107],{"class":3106},"sRJPX","\\b\\d",[1050,3109,3110],{"class":3053},"+",[1050,3112,3113],{"class":3106},"\\b",[1050,3115,1110],{"class":1102},[1050,3117,1491],{"class":1071},[1050,3119,1183],{"class":1102},[1050,3121,3122],{"class":1106},"?",[1050,3124,1110],{"class":1102},[1050,3126,1491],{"class":1071},[1050,3128,2810],{"class":1979},[1050,3130,1991],{"class":1071},[1050,3132,3134],{"class":1052,"line":3133},129,[1050,3135,2118],{"class":1067},[1050,3137,3139],{"class":1052,"line":3138},130,[1050,3140,3141],{"class":1056},"        # Replace IN clauses with multiple values\n",[1050,3143,3145,3147,3149,3151,3153,3155,3157,3159,3161,3164,3168,3170,3172,3174,3176,3178,3181,3183,3185,3187,3190,3192,3194,3196],{"class":1052,"line":3144},131,[1050,3146,3019],{"class":1067},[1050,3148,2096],{"class":1071},[1050,3150,3024],{"class":1067},[1050,3152,1072],{"class":1071},[1050,3154,3029],{"class":1979},[1050,3156,1952],{"class":1071},[1050,3158,3034],{"class":1199},[1050,3160,1110],{"class":1102},[1050,3162,3163],{"class":3039},"IN ",[1050,3165,3167],{"class":3166},"sk0MF","\\(",[1050,3169,1274],{"class":3042},[1050,3171,3045],{"class":1479},[1050,3173,2056],{"class":3048},[1050,3175,2282],{"class":3042},[1050,3177,3110],{"class":3053},[1050,3179,3180],{"class":3166},"\\)",[1050,3182,1110],{"class":1102},[1050,3184,1491],{"class":1071},[1050,3186,1183],{"class":1102},[1050,3188,3189],{"class":1106},"IN (?)",[1050,3191,1110],{"class":1102},[1050,3193,1491],{"class":1071},[1050,3195,2810],{"class":1979},[1050,3197,1991],{"class":1071},[1050,3199,3201],{"class":1052,"line":3200},132,[1050,3202,2118],{"class":1067},[1050,3204,3206],{"class":1052,"line":3205},133,[1050,3207,3208],{"class":1056},"        # Normalize whitespace\n",[1050,3210,3212,3214,3216,3218,3220,3222,3225,3227,3229,3231,3234],{"class":1052,"line":3211},134,[1050,3213,3019],{"class":1067},[1050,3215,2096],{"class":1071},[1050,3217,1183],{"class":1102},[1050,3219,1183],{"class":1102},[1050,3221,1072],{"class":1071},[1050,3223,3224],{"class":1979},"join",[1050,3226,1952],{"class":1071},[1050,3228,2562],{"class":1979},[1050,3230,1072],{"class":1071},[1050,3232,3233],{"class":1979},"split",[1050,3235,3236],{"class":1071},"())\n",[1050,3238,3240],{"class":1052,"line":3239},135,[1050,3241,2118],{"class":1067},[1050,3243,3245,3247],{"class":1052,"line":3244},136,[1050,3246,2956],{"class":1063},[1050,3248,3249],{"class":1067}," pattern\n",[1050,3251,3253],{"class":1052,"line":3252},137,[1050,3254,1083],{"emptyLinePlaceholder":1082},[1050,3256,3258],{"class":1052,"line":3257},138,[1050,3259,3260],{"class":1056},"# Query performance middleware\n",[1050,3262,3264,3266,3269],{"class":1052,"line":3263},139,[1050,3265,1368],{"class":1199},[1050,3267,3268],{"class":1915}," QueryPerformanceMiddleware",[1050,3270,1919],{"class":1071},[1050,3272,3274,3276,3279],{"class":1052,"line":3273},140,[1050,3275,1926],{"class":1925},[1050,3277,3278],{"class":1929},"Middleware to track query performance per request",[1050,3280,1933],{"class":1925},[1050,3282,3284],{"class":1052,"line":3283},141,[1050,3285,1939],{"class":1067},[1050,3287,3289,3291,3293,3295,3297,3299,3302],{"class":1052,"line":3288},142,[1050,3290,1945],{"class":1199},[1050,3292,1949],{"class":1948},[1050,3294,1952],{"class":1071},[1050,3296,1956],{"class":1955},[1050,3298,1491],{"class":1071},[1050,3300,3301],{"class":2082}," get_response",[1050,3303,1959],{"class":1071},[1050,3305,3307,3309,3311,3314,3316],{"class":1052,"line":3306},143,[1050,3308,1965],{"class":1089},[1050,3310,1072],{"class":1071},[1050,3312,3313],{"class":1075},"get_response",[1050,3315,1093],{"class":1071},[1050,3317,3318],{"class":1067}," get_response\n",[1050,3320,3322,3324,3326,3329,3331,3333],{"class":1052,"line":3321},144,[1050,3323,1965],{"class":1089},[1050,3325,1072],{"class":1071},[1050,3327,3328],{"class":1075},"instrumentation",[1050,3330,1093],{"class":1071},[1050,3332,1916],{"class":1979},[1050,3334,3335],{"class":1071},"()\n",[1050,3337,3339],{"class":1052,"line":3338},145,[1050,3340,1939],{"class":1067},[1050,3342,3344,3346,3349,3351,3353,3355,3358],{"class":1052,"line":3343},146,[1050,3345,1945],{"class":1199},[1050,3347,3348],{"class":1948}," __call__",[1050,3350,1952],{"class":1071},[1050,3352,1956],{"class":1955},[1050,3354,1491],{"class":1071},[1050,3356,3357],{"class":2082}," request",[1050,3359,1959],{"class":1071},[1050,3361,3363],{"class":1052,"line":3362},147,[1050,3364,3365],{"class":1056},"        # Reset query log\n",[1050,3367,3369,3372,3374,3377,3379,3382],{"class":1052,"line":3368},148,[1050,3370,3371],{"class":1067},"        connection",[1050,3373,1072],{"class":1071},[1050,3375,3376],{"class":1075},"queries_log",[1050,3378,1072],{"class":1071},[1050,3380,3381],{"class":1979},"clear",[1050,3383,3335],{"class":1071},[1050,3385,3387],{"class":1052,"line":3386},149,[1050,3388,2118],{"class":1067},[1050,3390,3392,3395,3397,3400,3402,3404],{"class":1052,"line":3391},150,[1050,3393,3394],{"class":1067},"        start_time ",[1050,3396,2096],{"class":1071},[1050,3398,3399],{"class":1067}," time",[1050,3401,1072],{"class":1071},[1050,3403,2488],{"class":1979},[1050,3405,3335],{"class":1071},[1050,3407,3409,3412,3414,3416,3418,3420,3422,3425],{"class":1052,"line":3408},151,[1050,3410,3411],{"class":1067},"        response ",[1050,3413,2096],{"class":1071},[1050,3415,2222],{"class":1089},[1050,3417,1072],{"class":1071},[1050,3419,3313],{"class":1979},[1050,3421,1952],{"class":1071},[1050,3423,3424],{"class":1979},"request",[1050,3426,1991],{"class":1071},[1050,3428,3430,3433,3435,3437,3439,3441],{"class":1052,"line":3429},152,[1050,3431,3432],{"class":1067},"        end_time ",[1050,3434,2096],{"class":1071},[1050,3436,3399],{"class":1067},[1050,3438,1072],{"class":1071},[1050,3440,2488],{"class":1979},[1050,3442,3335],{"class":1071},[1050,3444,3446],{"class":1052,"line":3445},153,[1050,3447,2118],{"class":1067},[1050,3449,3451],{"class":1052,"line":3450},154,[1050,3452,3453],{"class":1056},"        # Analyze request performance\n",[1050,3455,3457,3459,3461,3464,3466,3468,3470,3473,3475,3478],{"class":1052,"line":3456},155,[1050,3458,1965],{"class":1089},[1050,3460,1072],{"class":1071},[1050,3462,3463],{"class":1979},"analyze_request_performance",[1050,3465,1952],{"class":1071},[1050,3467,3424],{"class":1979},[1050,3469,1491],{"class":1071},[1050,3471,3472],{"class":1979}," start_time",[1050,3474,1491],{"class":1071},[1050,3476,3477],{"class":1979}," end_time",[1050,3479,1991],{"class":1071},[1050,3481,3483],{"class":1052,"line":3482},156,[1050,3484,2118],{"class":1067},[1050,3486,3488,3490],{"class":1052,"line":3487},157,[1050,3489,2956],{"class":1063},[1050,3491,3492],{"class":1067}," response\n",[1050,3494,3496],{"class":1052,"line":3495},158,[1050,3497,1939],{"class":1067},[1050,3499,3501,3503,3506,3508,3510,3512,3514,3516,3518,3520,3522],{"class":1052,"line":3500},159,[1050,3502,1945],{"class":1199},[1050,3504,3505],{"class":2072}," analyze_request_performance",[1050,3507,1952],{"class":1071},[1050,3509,1956],{"class":1955},[1050,3511,1491],{"class":1071},[1050,3513,3357],{"class":2082},[1050,3515,1491],{"class":1071},[1050,3517,3472],{"class":2082},[1050,3519,1491],{"class":1071},[1050,3521,3477],{"class":2082},[1050,3523,1959],{"class":1071},[1050,3525,3527,3529,3532],{"class":1052,"line":3526},160,[1050,3528,2107],{"class":1925},[1050,3530,3531],{"class":1929},"Analyze performance metrics for the request",[1050,3533,1933],{"class":1925},[1050,3535,3537],{"class":1052,"line":3536},161,[1050,3538,2118],{"class":1067},[1050,3540,3542,3545,3547,3550,3552,3555,3557,3559],{"class":1052,"line":3541},162,[1050,3543,3544],{"class":1067},"        total_queries ",[1050,3546,2096],{"class":1071},[1050,3548,3549],{"class":1948}," len",[1050,3551,1952],{"class":1071},[1050,3553,3554],{"class":1979},"connection",[1050,3556,1072],{"class":1071},[1050,3558,2440],{"class":1075},[1050,3560,1991],{"class":1071},[1050,3562,3564,3567,3569,3572,3574,3577,3579,3582,3584,3586,3588,3590,3593,3596,3599,3601,3603,3605,3607],{"class":1052,"line":3563},163,[1050,3565,3566],{"class":1067},"        total_query_time ",[1050,3568,2096],{"class":1071},[1050,3570,3571],{"class":1948}," sum",[1050,3573,1952],{"class":1071},[1050,3575,3576],{"class":2475},"float",[1050,3578,1952],{"class":1071},[1050,3580,3581],{"class":1979},"q",[1050,3583,1274],{"class":1071},[1050,3585,1110],{"class":1102},[1050,3587,2488],{"class":1106},[1050,3589,1110],{"class":1102},[1050,3591,3592],{"class":1071},"])",[1050,3594,3595],{"class":1063}," for",[1050,3597,3598],{"class":1979}," q ",[1050,3600,2432],{"class":1063},[1050,3602,2435],{"class":1979},[1050,3604,1072],{"class":1071},[1050,3606,2440],{"class":1075},[1050,3608,1991],{"class":1071},[1050,3610,3612,3615,3617,3620,3623],{"class":1052,"line":3611},164,[1050,3613,3614],{"class":1067},"        request_time ",[1050,3616,2096],{"class":1071},[1050,3618,3619],{"class":1067}," end_time ",[1050,3621,3622],{"class":1479},"-",[1050,3624,3625],{"class":1067}," start_time\n",[1050,3627,3629],{"class":1052,"line":3628},165,[1050,3630,2118],{"class":1067},[1050,3632,3634],{"class":1052,"line":3633},166,[1050,3635,3636],{"class":1056},"        # Log performance metrics\n",[1050,3638,3640,3643,3645],{"class":1052,"line":3639},167,[1050,3641,3642],{"class":1067},"        performance_data ",[1050,3644,2096],{"class":1071},[1050,3646,1096],{"class":1071},[1050,3648,3650,3652,3655,3657,3659,3661,3663,3665],{"class":1052,"line":3649},168,[1050,3651,1173],{"class":1102},[1050,3653,3654],{"class":1106},"path",[1050,3656,1110],{"class":1102},[1050,3658,1113],{"class":1071},[1050,3660,3357],{"class":1067},[1050,3662,1072],{"class":1071},[1050,3664,3654],{"class":1075},[1050,3666,1120],{"class":1071},[1050,3668,3670,3672,3675,3677,3679,3681,3683,3685],{"class":1052,"line":3669},169,[1050,3671,1173],{"class":1102},[1050,3673,3674],{"class":1106},"method",[1050,3676,1110],{"class":1102},[1050,3678,1113],{"class":1071},[1050,3680,3357],{"class":1067},[1050,3682,1072],{"class":1071},[1050,3684,3674],{"class":1075},[1050,3686,1120],{"class":1071},[1050,3688,3690,3692,3695,3697,3699,3702],{"class":1052,"line":3689},170,[1050,3691,1173],{"class":1102},[1050,3693,3694],{"class":1106},"query_count",[1050,3696,1110],{"class":1102},[1050,3698,1113],{"class":1071},[1050,3700,3701],{"class":1067}," total_queries",[1050,3703,1120],{"class":1071},[1050,3705,3707,3709,3712,3714,3716,3718,3720,3722,3725,3727,3729,3731,3733,3735],{"class":1052,"line":3706},171,[1050,3708,1173],{"class":1102},[1050,3710,3711],{"class":1106},"query_time",[1050,3713,1110],{"class":1102},[1050,3715,1113],{"class":1071},[1050,3717,2159],{"class":1199},[1050,3719,2162],{"class":1106},[1050,3721,1234],{"class":1186},[1050,3723,3724],{"class":1067},"total_query_time",[1050,3726,1480],{"class":1479},[1050,3728,2171],{"class":1116},[1050,3730,2174],{"class":1199},[1050,3732,1203],{"class":1186},[1050,3734,2352],{"class":1106},[1050,3736,1120],{"class":1071},[1050,3738,3740,3742,3745,3747,3749,3751,3753,3755,3757,3759,3761,3763,3765,3767],{"class":1052,"line":3739},172,[1050,3741,1173],{"class":1102},[1050,3743,3744],{"class":1106},"request_time",[1050,3746,1110],{"class":1102},[1050,3748,1113],{"class":1071},[1050,3750,2159],{"class":1199},[1050,3752,2162],{"class":1106},[1050,3754,1234],{"class":1186},[1050,3756,3744],{"class":1067},[1050,3758,1480],{"class":1479},[1050,3760,2171],{"class":1116},[1050,3762,2174],{"class":1199},[1050,3764,1203],{"class":1186},[1050,3766,2352],{"class":1106},[1050,3768,1120],{"class":1071},[1050,3770,3772,3774,3777,3779,3781,3783,3785,3787,3789,3791,3794,3796,3798,3800,3802,3805,3807,3810],{"class":1052,"line":3771},173,[1050,3773,1173],{"class":1102},[1050,3775,3776],{"class":1106},"query_percentage",[1050,3778,1110],{"class":1102},[1050,3780,1113],{"class":1071},[1050,3782,2159],{"class":1199},[1050,3784,2162],{"class":1106},[1050,3786,1234],{"class":1186},[1050,3788,1952],{"class":1071},[1050,3790,3724],{"class":1067},[1050,3792,3793],{"class":1479},"/",[1050,3795,3744],{"class":1067},[1050,3797,2056],{"class":1071},[1050,3799,1480],{"class":1479},[1050,3801,2279],{"class":1116},[1050,3803,3804],{"class":1199},":.1f",[1050,3806,1203],{"class":1186},[1050,3808,3809],{"class":1106},"%\"",[1050,3811,1120],{"class":1071},[1050,3813,3815],{"class":1052,"line":3814},174,[1050,3816,2202],{"class":1071},[1050,3818,3820],{"class":1052,"line":3819},175,[1050,3821,2118],{"class":1067},[1050,3823,3825],{"class":1052,"line":3824},176,[1050,3826,3827],{"class":1056},"        # Detect N+1 queries\n",[1050,3829,3831,3834,3836,3838,3840,3843],{"class":1052,"line":3830},177,[1050,3832,3833],{"class":1067},"        n_plus_one_patterns ",[1050,3835,2096],{"class":1071},[1050,3837,2222],{"class":1089},[1050,3839,1072],{"class":1071},[1050,3841,3842],{"class":1979},"detect_n_plus_one",[1050,3844,3335],{"class":1071},[1050,3846,3848,3850,3853],{"class":1052,"line":3847},178,[1050,3849,2213],{"class":1063},[1050,3851,3852],{"class":1067}," n_plus_one_patterns",[1050,3854,1919],{"class":1071},[1050,3856,3858,3861,3863,3865,3868,3870,3872,3874],{"class":1052,"line":3857},179,[1050,3859,3860],{"class":1067},"            performance_data",[1050,3862,1274],{"class":1071},[1050,3864,1110],{"class":1102},[1050,3866,3867],{"class":1106},"n_plus_one_detected",[1050,3869,1110],{"class":1102},[1050,3871,2282],{"class":1071},[1050,3873,1093],{"class":1071},[1050,3875,3876],{"class":1067}," n_plus_one_patterns\n",[1050,3878,3880],{"class":1052,"line":3879},180,[1050,3881,2118],{"class":1067},[1050,3883,3885],{"class":1052,"line":3884},181,[1050,3886,3887],{"class":1056},"        # Log if performance is concerning\n",[1050,3889,3891,3893,3896,3898,3901,3904,3907,3909,3912,3914,3917,3919,3922],{"class":1052,"line":3890},182,[1050,3892,2213],{"class":1063},[1050,3894,3895],{"class":1067}," total_queries ",[1050,3897,2219],{"class":1479},[1050,3899,3900],{"class":1116}," 20",[1050,3902,3903],{"class":1479}," or",[1050,3905,3906],{"class":1067}," total_query_time ",[1050,3908,2219],{"class":1479},[1050,3910,3911],{"class":1116}," 0.5",[1050,3913,3903],{"class":1479},[1050,3915,3916],{"class":1067}," request_time ",[1050,3918,2219],{"class":1479},[1050,3920,3921],{"class":1116}," 2.0",[1050,3923,1919],{"class":1071},[1050,3925,3927,3930,3932,3934,3936,3938,3941,3943,3946,3948],{"class":1052,"line":3926},183,[1050,3928,3929],{"class":1067},"            logging",[1050,3931,1072],{"class":1071},[1050,3933,1980],{"class":1979},[1050,3935,1952],{"class":1071},[1050,3937,1110],{"class":1102},[1050,3939,3940],{"class":1106},"performance",[1050,3942,1110],{"class":1102},[1050,3944,3945],{"class":1071},").",[1050,3947,2243],{"class":1979},[1050,3949,2246],{"class":1071},[1050,3951,3953,3955,3958,3960,3962,3964,3966,3968,3970],{"class":1052,"line":3952},184,[1050,3954,2252],{"class":1199},[1050,3956,3957],{"class":1106},"\"Performance concern for ",[1050,3959,1234],{"class":1186},[1050,3961,3424],{"class":1979},[1050,3963,1072],{"class":1071},[1050,3965,3654],{"class":1075},[1050,3967,1203],{"class":1186},[1050,3969,2162],{"class":1106},[1050,3971,1120],{"class":1071},[1050,3973,3975,3977,3979],{"class":1052,"line":3974},185,[1050,3976,2296],{"class":2295},[1050,3978,2096],{"class":1071},[1050,3980,3981],{"class":1979},"performance_data\n",[1050,3983,3985],{"class":1052,"line":3984},186,[1050,3986,2307],{"class":1071},[1050,3988,3990],{"class":1052,"line":3989},187,[1050,3991,2118],{"class":1067},[1050,3993,3995],{"class":1052,"line":3994},188,[1050,3996,3997],{"class":1056},"        # Store metrics for monitoring\n",[1050,3999,4001,4003,4005,4008,4010,4013],{"class":1052,"line":4000},189,[1050,4002,1965],{"class":1089},[1050,4004,1072],{"class":1071},[1050,4006,4007],{"class":1979},"store_performance_metrics",[1050,4009,1952],{"class":1071},[1050,4011,4012],{"class":1979},"performance_data",[1050,4014,1991],{"class":1071},[1050,4016,4018],{"class":1052,"line":4017},190,[1050,4019,1939],{"class":1067},[1050,4021,4023,4025,4028,4030,4032],{"class":1052,"line":4022},191,[1050,4024,1945],{"class":1199},[1050,4026,4027],{"class":2072}," detect_n_plus_one",[1050,4029,1952],{"class":1071},[1050,4031,1956],{"class":1955},[1050,4033,1959],{"class":1071},[1050,4035,4037,4039,4042],{"class":1052,"line":4036},192,[1050,4038,2107],{"class":1925},[1050,4040,4041],{"class":1929},"Detect potential N+1 query patterns",[1050,4043,1933],{"class":1925},[1050,4045,4047],{"class":1052,"line":4046},193,[1050,4048,2118],{"class":1067},[1050,4050,4052,4054,4056],{"class":1052,"line":4051},194,[1050,4053,2410],{"class":1067},[1050,4055,2096],{"class":1071},[1050,4057,2415],{"class":1071},[1050,4059,4061],{"class":1052,"line":4060},195,[1050,4062,2118],{"class":1067},[1050,4064,4066,4068,4070,4072,4074,4076,4078],{"class":1052,"line":4065},196,[1050,4067,2426],{"class":1063},[1050,4069,2429],{"class":1067},[1050,4071,2432],{"class":1063},[1050,4073,2435],{"class":1067},[1050,4075,1072],{"class":1071},[1050,4077,2440],{"class":1075},[1050,4079,1919],{"class":1071},[1050,4081,4083,4085,4087,4089,4091,4093,4095,4097,4099,4101,4103,4105,4107,4109],{"class":1052,"line":4082},197,[1050,4084,2511],{"class":1067},[1050,4086,2096],{"class":1071},[1050,4088,2222],{"class":1089},[1050,4090,1072],{"class":1071},[1050,4092,3328],{"class":1075},[1050,4094,1072],{"class":1071},[1050,4096,2520],{"class":1979},[1050,4098,1952],{"class":1071},[1050,4100,2481],{"class":1979},[1050,4102,1274],{"class":1071},[1050,4104,1110],{"class":1102},[1050,4106,2136],{"class":1106},[1050,4108,1110],{"class":1102},[1050,4110,2493],{"class":1071},[1050,4112,4114,4117,4119,4121,4123,4125,4127,4129,4132,4134,4136,4138,4140,4142,4145],{"class":1052,"line":4113},198,[1050,4115,4116],{"class":1067},"            query_patterns",[1050,4118,1274],{"class":1071},[1050,4120,2562],{"class":1067},[1050,4122,2282],{"class":1071},[1050,4124,1093],{"class":1071},[1050,4126,2549],{"class":1067},[1050,4128,1072],{"class":1071},[1050,4130,4131],{"class":1979},"get",[1050,4133,1952],{"class":1071},[1050,4135,2562],{"class":1979},[1050,4137,1491],{"class":1071},[1050,4139,2584],{"class":1116},[1050,4141,2056],{"class":1071},[1050,4143,4144],{"class":1479}," +",[1050,4146,2693],{"class":1116},[1050,4148,4150],{"class":1052,"line":4149},199,[1050,4151,2118],{"class":1067},[1050,4153,4155],{"class":1052,"line":4154},200,[1050,4156,4157],{"class":1056},"        # Return patterns that appear more than 5 times\n",[1050,4159,4161,4163],{"class":1052,"line":4160},201,[1050,4162,2956],{"class":1063},[1050,4164,1096],{"class":1071},[1050,4166,4168,4171,4173],{"class":1052,"line":4167},202,[1050,4169,4170],{"class":1067},"            pattern",[1050,4172,1113],{"class":1071},[1050,4174,4175],{"class":1067}," count \n",[1050,4177,4179,4182,4184,4186,4189,4191,4193,4195,4197,4200],{"class":1052,"line":4178},203,[1050,4180,4181],{"class":1063},"            for",[1050,4183,2810],{"class":1067},[1050,4185,1491],{"class":1071},[1050,4187,4188],{"class":1067}," count ",[1050,4190,2432],{"class":1063},[1050,4192,2549],{"class":1067},[1050,4194,1072],{"class":1071},[1050,4196,2824],{"class":1979},[1050,4198,4199],{"class":1071},"()",[1050,4201,4202],{"class":1067}," \n",[1050,4204,4206,4208,4210,4212],{"class":1052,"line":4205},204,[1050,4207,2537],{"class":1063},[1050,4209,4188],{"class":1067},[1050,4211,2219],{"class":1479},[1050,4213,4214],{"class":1116}," 5\n",[1050,4216,4218],{"class":1052,"line":4217},205,[1050,4219,2202],{"class":1071},[1050,4221,4223],{"class":1052,"line":4222},206,[1050,4224,1939],{"class":1067},[1050,4226,4228,4230,4233,4235,4237,4239,4242],{"class":1052,"line":4227},207,[1050,4229,1945],{"class":1199},[1050,4231,4232],{"class":2072}," store_performance_metrics",[1050,4234,1952],{"class":1071},[1050,4236,1956],{"class":1955},[1050,4238,1491],{"class":1071},[1050,4240,4241],{"class":2082}," metrics",[1050,4243,1959],{"class":1071},[1050,4245,4247,4249,4252],{"class":1052,"line":4246},208,[1050,4248,2107],{"class":1925},[1050,4250,4251],{"class":1929},"Store performance metrics for analysis",[1050,4253,1933],{"class":1925},[1050,4255,4257],{"class":1052,"line":4256},209,[1050,4258,2118],{"class":1067},[1050,4260,4262],{"class":1052,"line":4261},210,[1050,4263,4264],{"class":1056},"        # Store in cache for real-time monitoring\n",[1050,4266,4268,4271,4273,4275,4278,4280,4283,4285],{"class":1052,"line":4267},211,[1050,4269,4270],{"class":1063},"        from",[1050,4272,1875],{"class":1067},[1050,4274,1072],{"class":1071},[1050,4276,4277],{"class":1067},"core",[1050,4279,1072],{"class":1071},[1050,4281,4282],{"class":1067},"cache ",[1050,4284,1064],{"class":1063},[1050,4286,4287],{"class":1067}," cache\n",[1050,4289,4291],{"class":1052,"line":4290},212,[1050,4292,2118],{"class":1067},[1050,4294,4296,4299,4301,4303,4306,4308,4311,4313,4315,4317,4319,4322,4324],{"class":1052,"line":4295},213,[1050,4297,4298],{"class":1067},"        cache_key ",[1050,4300,2096],{"class":1071},[1050,4302,2159],{"class":1199},[1050,4304,4305],{"class":1106},"\"perf_metrics_",[1050,4307,1234],{"class":1186},[1050,4309,4310],{"class":2475},"int",[1050,4312,1952],{"class":1071},[1050,4314,2488],{"class":1979},[1050,4316,1072],{"class":1071},[1050,4318,2488],{"class":1979},[1050,4320,4321],{"class":1071},"())",[1050,4323,1203],{"class":1186},[1050,4325,4326],{"class":1106},"\"\n",[1050,4328,4330,4333,4335,4338,4340,4343,4345,4347,4349,4352,4354,4357],{"class":1052,"line":4329},214,[1050,4331,4332],{"class":1067},"        cache",[1050,4334,1072],{"class":1071},[1050,4336,4337],{"class":1979},"set",[1050,4339,1952],{"class":1071},[1050,4341,4342],{"class":1979},"cache_key",[1050,4344,1491],{"class":1071},[1050,4346,4241],{"class":1979},[1050,4348,1491],{"class":1071},[1050,4350,4351],{"class":2295}," timeout",[1050,4353,2096],{"class":1071},[1050,4355,4356],{"class":1116},"3600",[1050,4358,1991],{"class":1071},[1050,4360,4362],{"class":1052,"line":4361},215,[1050,4363,2118],{"class":1067},[1050,4365,4367],{"class":1052,"line":4366},216,[1050,4368,4369],{"class":1056},"        # Store in database for historical analysis\n",[1050,4371,4373,4376],{"class":1052,"line":4372},217,[1050,4374,4375],{"class":1063},"        try",[1050,4377,1919],{"class":1071},[1050,4379,4381,4384,4387,4390,4392],{"class":1052,"line":4380},218,[1050,4382,4383],{"class":1063},"            from",[1050,4385,4386],{"class":1071}," .",[1050,4388,4389],{"class":1067},"models ",[1050,4391,1064],{"class":1063},[1050,4393,4394],{"class":1067}," PerformanceMetric\n",[1050,4396,4398,4401,4403,4406,4408,4411,4413,4416,4419],{"class":1052,"line":4397},219,[1050,4399,4400],{"class":1067},"            PerformanceMetric",[1050,4402,1072],{"class":1071},[1050,4404,4405],{"class":1075},"objects",[1050,4407,1072],{"class":1071},[1050,4409,4410],{"class":1979},"create",[1050,4412,1952],{"class":1071},[1050,4414,4415],{"class":1479},"**",[1050,4417,4418],{"class":1979},"metrics",[1050,4420,1991],{"class":1071},[1050,4422,4424,4427,4430],{"class":1052,"line":4423},220,[1050,4425,4426],{"class":1063},"        except",[1050,4428,4429],{"class":2475}," Exception",[1050,4431,1919],{"class":1071},[1050,4433,4435,4438],{"class":1052,"line":4434},221,[1050,4436,4437],{"class":1063},"            pass",[1050,4439,4440],{"class":1056},"  # Don't fail request if metrics storage fails\n",[1035,4442,4444],{"id":4443},"real-time-query-monitoring","Real-time Query Monitoring",[1040,4446,4448],{"className":1042,"code":4447,"language":1044,"meta":1045,"style":1045},"from django.db import connection\nfrom django.core.management.base import BaseCommand\nimport time\nimport threading\n\nclass QueryMonitor:\n    \"\"\"Real-time query monitoring system\"\"\"\n    \n    def __init__(self):\n        self.active_queries = {}\n        self.query_stats = {\n            'total_queries': 0,\n            'slow_queries': 0,\n            'total_time': 0,\n            'avg_time': 0,\n        }\n        self.monitoring = False\n    \n    def start_monitoring(self):\n        \"\"\"Start real-time query monitoring\"\"\"\n        \n        self.monitoring = True\n        monitor_thread = threading.Thread(target=self._monitor_loop)\n        monitor_thread.daemon = True\n        monitor_thread.start()\n    \n    def stop_monitoring(self):\n        \"\"\"Stop query monitoring\"\"\"\n        self.monitoring = False\n    \n    def _monitor_loop(self):\n        \"\"\"Main monitoring loop\"\"\"\n        \n        last_query_count = 0\n        \n        while self.monitoring:\n            current_queries = connection.queries\n            new_queries = current_queries[last_query_count:]\n            \n            for query_data in new_queries:\n                self._process_query(query_data)\n            \n            last_query_count = len(current_queries)\n            time.sleep(0.1)  # Check every 100ms\n    \n    def _process_query(self, query_data):\n        \"\"\"Process individual query for monitoring\"\"\"\n        \n        duration = float(query_data['time'])\n        sql = query_data['sql']\n        \n        # Update statistics\n        self.query_stats['total_queries'] += 1\n        self.query_stats['total_time'] += duration\n        self.query_stats['avg_time'] = (\n            self.query_stats['total_time'] / self.query_stats['total_queries']\n        )\n        \n        # Check for slow queries\n        if duration > 0.1:  # 100ms threshold\n            self.query_stats['slow_queries'] += 1\n            self._handle_slow_query(sql, duration)\n        \n        # Check for problematic patterns\n        self._check_query_patterns(sql, duration)\n    \n    def _handle_slow_query(self, sql, duration):\n        \"\"\"Handle slow query detection\"\"\"\n        \n        slow_query_data = {\n            'sql': sql[:200] + '...' if len(sql) > 200 else sql,\n            'duration': f\"{duration*1000:.2f}ms\",\n            'timestamp': time.time(),\n        }\n        \n        # Log slow query\n        logging.getLogger('slow_queries').warning(\n            f\"Slow query detected: {duration*1000:.2f}ms\",\n            extra=slow_query_data\n        )\n        \n        # Send alert if configured\n        self._send_slow_query_alert(slow_query_data)\n    \n    def _check_query_patterns(self, sql, duration):\n        \"\"\"Check for problematic query patterns\"\"\"\n        \n        # Check for SELECT N+1 patterns\n        if 'SELECT' in sql.upper() and 'WHERE' in sql.upper():\n            pattern = self._extract_pattern(sql)\n            \n            if pattern in self.active_queries:\n                self.active_queries[pattern]['count'] += 1\n                \n                # Alert if pattern repeats too frequently\n                if self.active_queries[pattern]['count'] > 10:\n                    self._handle_n_plus_one_detection(pattern)\n            else:\n                self.active_queries[pattern] = {\n                    'count': 1,\n                    'first_seen': time.time(),\n                }\n    \n    def _extract_pattern(self, sql):\n        \"\"\"Extract query pattern for N+1 detection\"\"\"\n        import re\n        \n        # Simplified pattern extraction\n        pattern = re.sub(r'\\d+', '?', sql)\n        pattern = re.sub(r\"'[^']*'\", \"'?'\", pattern)\n        return pattern[:100]  # Limit pattern length\n    \n    def _handle_n_plus_one_detection(self, pattern):\n        \"\"\"Handle N+1 query detection\"\"\"\n        \n        logging.getLogger('performance').error(\n            f\"Potential N+1 query detected: {pattern}\",\n            extra={'pattern': pattern, 'count': self.active_queries[pattern]['count']}\n        )\n    \n    def _send_slow_query_alert(self, query_data):\n        \"\"\"Send alert for slow queries\"\"\"\n        \n        # Implementation depends on your alerting system\n        # Could send email, Slack message, etc.\n        pass\n    \n    def get_current_stats(self):\n        \"\"\"Get current monitoring statistics\"\"\"\n        return self.query_stats.copy()\n\n# Management command for query monitoring\nclass Command(BaseCommand):\n    \"\"\"Management command to monitor database queries\"\"\"\n    \n    help = 'Monitor database queries in real-time'\n    \n    def add_arguments(self, parser):\n        parser.add_argument('--duration', type=int, default=60, help='Monitoring duration in seconds')\n        parser.add_argument('--threshold', type=float, default=0.1, help='Slow query threshold in seconds')\n    \n    def handle(self, *args, **options):\n        monitor = QueryMonitor()\n        monitor.slow_query_threshold = options['threshold']\n        \n        self.stdout.write('Starting query monitoring...')\n        monitor.start_monitoring()\n        \n        try:\n            # Monitor for specified duration\n            for i in range(options['duration']):\n                time.sleep(1)\n                \n                if i % 10 == 0:  # Report every 10 seconds\n                    stats = monitor.get_current_stats()\n                    self.stdout.write(\n                        f\"Queries: {stats['total_queries']}, \"\n                        f\"Slow: {stats['slow_queries']}, \"\n                        f\"Avg: {stats['avg_time']*1000:.2f}ms\"\n                    )\n        \n        except KeyboardInterrupt:\n            self.stdout.write('Monitoring interrupted by user')\n        \n        finally:\n            monitor.stop_monitoring()\n            final_stats = monitor.get_current_stats()\n            \n            self.stdout.write('\\n=== Final Statistics ===')\n            self.stdout.write(f\"Total queries: {final_stats['total_queries']}\")\n            self.stdout.write(f\"Slow queries: {final_stats['slow_queries']}\")\n            self.stdout.write(f\"Average time: {final_stats['avg_time']*1000:.2f}ms\")\n            self.stdout.write(f\"Total time: {final_stats['total_time']:.2f}s\")\n",[1047,4449,4450,4464,4489,4495,4502,4506,4515,4524,4528,4540,4553,4566,4581,4595,4609,4623,4627,4641,4645,4658,4667,4671,4684,4715,4729,4740,4744,4757,4766,4778,4782,4795,4804,4808,4818,4822,4835,4849,4867,4871,4884,4900,4904,4920,4940,4944,4961,4970,4974,4997,5016,5020,5025,5047,5069,5091,5127,5131,5135,5140,5155,5177,5196,5200,5205,5224,5228,5249,5258,5262,5271,5322,5352,5372,5376,5380,5385,5408,5431,5440,5444,5448,5453,5469,5473,5494,5503,5507,5512,5553,5572,5576,5592,5619,5624,5629,5660,5676,5683,5701,5715,5734,5738,5742,5759,5768,5774,5778,5783,5822,5870,5885,5889,5906,5915,5919,5942,5959,6007,6011,6015,6032,6041,6045,6050,6055,6060,6064,6077,6086,6103,6107,6112,6127,6136,6140,6155,6159,6177,6231,6279,6283,6312,6323,6348,6352,6377,6388,6392,6398,6403,6430,6446,6450,6471,6488,6502,6529,6554,6586,6591,6595,6604,6627,6631,6638,6650,6665,6669,6695,6736,6775,6820],{"__ignoreMap":1045},[1050,4451,4452,4454,4456,4458,4460,4462],{"class":1052,"line":1053},[1050,4453,1872],{"class":1063},[1050,4455,1875],{"class":1067},[1050,4457,1072],{"class":1071},[1050,4459,1880],{"class":1067},[1050,4461,1064],{"class":1063},[1050,4463,1885],{"class":1067},[1050,4465,4466,4468,4470,4472,4474,4476,4479,4481,4484,4486],{"class":1052,"line":1060},[1050,4467,1872],{"class":1063},[1050,4469,1875],{"class":1067},[1050,4471,1072],{"class":1071},[1050,4473,4277],{"class":1067},[1050,4475,1072],{"class":1071},[1050,4477,4478],{"class":1067},"management",[1050,4480,1072],{"class":1071},[1050,4482,4483],{"class":1067},"base ",[1050,4485,1064],{"class":1063},[1050,4487,4488],{"class":1067}," BaseCommand\n",[1050,4490,4491,4493],{"class":1052,"line":1079},[1050,4492,1064],{"class":1063},[1050,4494,1858],{"class":1067},[1050,4496,4497,4499],{"class":1052,"line":1086},[1050,4498,1064],{"class":1063},[1050,4500,4501],{"class":1067}," threading\n",[1050,4503,4504],{"class":1052,"line":1099},[1050,4505,1083],{"emptyLinePlaceholder":1082},[1050,4507,4508,4510,4513],{"class":1052,"line":1123},[1050,4509,1368],{"class":1199},[1050,4511,4512],{"class":1915}," QueryMonitor",[1050,4514,1919],{"class":1071},[1050,4516,4517,4519,4522],{"class":1052,"line":1141},[1050,4518,1926],{"class":1925},[1050,4520,4521],{"class":1929},"Real-time query monitoring system",[1050,4523,1933],{"class":1925},[1050,4525,4526],{"class":1052,"line":1155},[1050,4527,1939],{"class":1067},[1050,4529,4530,4532,4534,4536,4538],{"class":1052,"line":1170},[1050,4531,1945],{"class":1199},[1050,4533,1949],{"class":1948},[1050,4535,1952],{"class":1071},[1050,4537,1956],{"class":1955},[1050,4539,1959],{"class":1071},[1050,4541,4542,4544,4546,4549,4551],{"class":1052,"line":1220},[1050,4543,1965],{"class":1089},[1050,4545,1072],{"class":1071},[1050,4547,4548],{"class":1075},"active_queries",[1050,4550,1093],{"class":1071},[1050,4552,2415],{"class":1071},[1050,4554,4555,4557,4559,4562,4564],{"class":1052,"line":1241},[1050,4556,1965],{"class":1089},[1050,4558,1072],{"class":1071},[1050,4560,4561],{"class":1075},"query_stats",[1050,4563,1093],{"class":1071},[1050,4565,1096],{"class":1071},[1050,4567,4568,4570,4573,4575,4577,4579],{"class":1052,"line":1247},[1050,4569,1173],{"class":1102},[1050,4571,4572],{"class":1106},"total_queries",[1050,4574,1110],{"class":1102},[1050,4576,1113],{"class":1071},[1050,4578,2584],{"class":1116},[1050,4580,1120],{"class":1071},[1050,4582,4583,4585,4587,4589,4591,4593],{"class":1052,"line":1261},[1050,4584,1173],{"class":1102},[1050,4586,1761],{"class":1106},[1050,4588,1110],{"class":1102},[1050,4590,1113],{"class":1071},[1050,4592,2584],{"class":1116},[1050,4594,1120],{"class":1071},[1050,4596,4597,4599,4601,4603,4605,4607],{"class":1052,"line":1305},[1050,4598,1173],{"class":1102},[1050,4600,2594],{"class":1106},[1050,4602,1110],{"class":1102},[1050,4604,1113],{"class":1071},[1050,4606,2584],{"class":1116},[1050,4608,1120],{"class":1071},[1050,4610,4611,4613,4615,4617,4619,4621],{"class":1052,"line":1324},[1050,4612,1173],{"class":1102},[1050,4614,2839],{"class":1106},[1050,4616,1110],{"class":1102},[1050,4618,1113],{"class":1071},[1050,4620,2584],{"class":1116},[1050,4622,1120],{"class":1071},[1050,4624,4625],{"class":1052,"line":1329},[1050,4626,2202],{"class":1071},[1050,4628,4629,4631,4633,4636,4638],{"class":1052,"line":1335},[1050,4630,1965],{"class":1089},[1050,4632,1072],{"class":1071},[1050,4634,4635],{"class":1075},"monitoring",[1050,4637,1093],{"class":1071},[1050,4639,4640],{"class":1135}," False\n",[1050,4642,4643],{"class":1052,"line":1349},[1050,4644,1939],{"class":1067},[1050,4646,4647,4649,4652,4654,4656],{"class":1052,"line":1363},[1050,4648,1945],{"class":1199},[1050,4650,4651],{"class":2072}," start_monitoring",[1050,4653,1952],{"class":1071},[1050,4655,1956],{"class":1955},[1050,4657,1959],{"class":1071},[1050,4659,4660,4662,4665],{"class":1052,"line":1384},[1050,4661,2107],{"class":1925},[1050,4663,4664],{"class":1929},"Start real-time query monitoring",[1050,4666,1933],{"class":1925},[1050,4668,4669],{"class":1052,"line":1404},[1050,4670,2118],{"class":1067},[1050,4672,4673,4675,4677,4679,4681],{"class":1052,"line":1409},[1050,4674,1965],{"class":1089},[1050,4676,1072],{"class":1071},[1050,4678,4635],{"class":1075},[1050,4680,1093],{"class":1071},[1050,4682,4683],{"class":1135}," True\n",[1050,4685,4686,4689,4691,4694,4696,4699,4701,4704,4706,4708,4710,4713],{"class":1052,"line":1423},[1050,4687,4688],{"class":1067},"        monitor_thread ",[1050,4690,2096],{"class":1071},[1050,4692,4693],{"class":1067}," threading",[1050,4695,1072],{"class":1071},[1050,4697,4698],{"class":1979},"Thread",[1050,4700,1952],{"class":1071},[1050,4702,4703],{"class":2295},"target",[1050,4705,2096],{"class":1071},[1050,4707,1956],{"class":1089},[1050,4709,1072],{"class":1071},[1050,4711,4712],{"class":1075},"_monitor_loop",[1050,4714,1991],{"class":1071},[1050,4716,4717,4720,4722,4725,4727],{"class":1052,"line":1443},[1050,4718,4719],{"class":1067},"        monitor_thread",[1050,4721,1072],{"class":1071},[1050,4723,4724],{"class":1075},"daemon",[1050,4726,1093],{"class":1071},[1050,4728,4683],{"class":1135},[1050,4730,4731,4733,4735,4738],{"class":1052,"line":1464},[1050,4732,4719],{"class":1067},[1050,4734,1072],{"class":1071},[1050,4736,4737],{"class":1979},"start",[1050,4739,3335],{"class":1071},[1050,4741,4742],{"class":1052,"line":1497},[1050,4743,1939],{"class":1067},[1050,4745,4746,4748,4751,4753,4755],{"class":1052,"line":1514},[1050,4747,1945],{"class":1199},[1050,4749,4750],{"class":2072}," stop_monitoring",[1050,4752,1952],{"class":1071},[1050,4754,1956],{"class":1955},[1050,4756,1959],{"class":1071},[1050,4758,4759,4761,4764],{"class":1052,"line":1533},[1050,4760,2107],{"class":1925},[1050,4762,4763],{"class":1929},"Stop query monitoring",[1050,4765,1933],{"class":1925},[1050,4767,4768,4770,4772,4774,4776],{"class":1052,"line":1538},[1050,4769,1965],{"class":1089},[1050,4771,1072],{"class":1071},[1050,4773,4635],{"class":1075},[1050,4775,1093],{"class":1071},[1050,4777,4640],{"class":1135},[1050,4779,4780],{"class":1052,"line":1552},[1050,4781,1939],{"class":1067},[1050,4783,4784,4786,4789,4791,4793],{"class":1052,"line":1571},[1050,4785,1945],{"class":1199},[1050,4787,4788],{"class":2072}," _monitor_loop",[1050,4790,1952],{"class":1071},[1050,4792,1956],{"class":1955},[1050,4794,1959],{"class":1071},[1050,4796,4797,4799,4802],{"class":1052,"line":1591},[1050,4798,2107],{"class":1925},[1050,4800,4801],{"class":1929},"Main monitoring loop",[1050,4803,1933],{"class":1925},[1050,4805,4806],{"class":1052,"line":1618},[1050,4807,2118],{"class":1067},[1050,4809,4810,4813,4815],{"class":1052,"line":1634},[1050,4811,4812],{"class":1067},"        last_query_count ",[1050,4814,2096],{"class":1071},[1050,4816,4817],{"class":1116}," 0\n",[1050,4819,4820],{"class":1052,"line":1653},[1050,4821,2118],{"class":1067},[1050,4823,4824,4827,4829,4831,4833],{"class":1052,"line":1658},[1050,4825,4826],{"class":1063},"        while",[1050,4828,2222],{"class":1089},[1050,4830,1072],{"class":1071},[1050,4832,4635],{"class":1075},[1050,4834,1919],{"class":1071},[1050,4836,4837,4840,4842,4844,4846],{"class":1052,"line":1663},[1050,4838,4839],{"class":1067},"            current_queries ",[1050,4841,2096],{"class":1071},[1050,4843,2435],{"class":1067},[1050,4845,1072],{"class":1071},[1050,4847,4848],{"class":1075},"queries\n",[1050,4850,4851,4854,4856,4859,4861,4864],{"class":1052,"line":1677},[1050,4852,4853],{"class":1067},"            new_queries ",[1050,4855,2096],{"class":1071},[1050,4857,4858],{"class":1067}," current_queries",[1050,4860,1274],{"class":1071},[1050,4862,4863],{"class":1067},"last_query_count",[1050,4865,4866],{"class":1071},":]\n",[1050,4868,4869],{"class":1052,"line":1691},[1050,4870,2499],{"class":1067},[1050,4872,4873,4875,4877,4879,4882],{"class":1052,"line":1714},[1050,4874,4181],{"class":1063},[1050,4876,2429],{"class":1067},[1050,4878,2432],{"class":1063},[1050,4880,4881],{"class":1067}," new_queries",[1050,4883,1919],{"class":1071},[1050,4885,4886,4889,4891,4894,4896,4898],{"class":1052,"line":1735},[1050,4887,4888],{"class":1089},"                self",[1050,4890,1072],{"class":1071},[1050,4892,4893],{"class":1979},"_process_query",[1050,4895,1952],{"class":1071},[1050,4897,2481],{"class":1979},[1050,4899,1991],{"class":1071},[1050,4901,4902],{"class":1052,"line":1751},[1050,4903,2499],{"class":1067},[1050,4905,4906,4909,4911,4913,4915,4918],{"class":1052,"line":1756},[1050,4907,4908],{"class":1067},"            last_query_count ",[1050,4910,2096],{"class":1071},[1050,4912,3549],{"class":1948},[1050,4914,1952],{"class":1071},[1050,4916,4917],{"class":1979},"current_queries",[1050,4919,1991],{"class":1071},[1050,4921,4922,4925,4927,4930,4932,4935,4937],{"class":1052,"line":1770},[1050,4923,4924],{"class":1067},"            time",[1050,4926,1072],{"class":1071},[1050,4928,4929],{"class":1979},"sleep",[1050,4931,1952],{"class":1071},[1050,4933,4934],{"class":1116},"0.1",[1050,4936,2056],{"class":1071},[1050,4938,4939],{"class":1056},"  # Check every 100ms\n",[1050,4941,4942],{"class":1052,"line":1791},[1050,4943,1939],{"class":1067},[1050,4945,4946,4948,4951,4953,4955,4957,4959],{"class":1052,"line":1811},[1050,4947,1945],{"class":1199},[1050,4949,4950],{"class":2072}," _process_query",[1050,4952,1952],{"class":1071},[1050,4954,1956],{"class":1955},[1050,4956,1491],{"class":1071},[1050,4958,2453],{"class":2082},[1050,4960,1959],{"class":1071},[1050,4962,4963,4965,4968],{"class":1052,"line":1826},[1050,4964,2107],{"class":1925},[1050,4966,4967],{"class":1929},"Process individual query for monitoring",[1050,4969,1933],{"class":1925},[1050,4971,4972],{"class":1052,"line":1831},[1050,4973,2118],{"class":1067},[1050,4975,4976,4979,4981,4983,4985,4987,4989,4991,4993,4995],{"class":1052,"line":1836},[1050,4977,4978],{"class":1067},"        duration ",[1050,4980,2096],{"class":1071},[1050,4982,2476],{"class":2475},[1050,4984,1952],{"class":1071},[1050,4986,2481],{"class":1979},[1050,4988,1274],{"class":1071},[1050,4990,1110],{"class":1102},[1050,4992,2488],{"class":1106},[1050,4994,1110],{"class":1102},[1050,4996,2493],{"class":1071},[1050,4998,4999,5002,5004,5006,5008,5010,5012,5014],{"class":1052,"line":1842},[1050,5000,5001],{"class":1067},"        sql ",[1050,5003,2096],{"class":1071},[1050,5005,2453],{"class":1067},[1050,5007,1274],{"class":1071},[1050,5009,1110],{"class":1102},[1050,5011,2136],{"class":1106},[1050,5013,1110],{"class":1102},[1050,5015,2464],{"class":1071},[1050,5017,5018],{"class":1052,"line":1847},[1050,5019,2118],{"class":1067},[1050,5021,5022],{"class":1052,"line":1853},[1050,5023,5024],{"class":1056},"        # Update statistics\n",[1050,5026,5027,5029,5031,5033,5035,5037,5039,5041,5043,5045],{"class":1052,"line":1861},[1050,5028,1965],{"class":1089},[1050,5030,1072],{"class":1071},[1050,5032,4561],{"class":1075},[1050,5034,1274],{"class":1071},[1050,5036,1110],{"class":1102},[1050,5038,4572],{"class":1106},[1050,5040,1110],{"class":1102},[1050,5042,2282],{"class":1071},[1050,5044,2690],{"class":1071},[1050,5046,2693],{"class":1116},[1050,5048,5049,5051,5053,5055,5057,5059,5061,5063,5065,5067],{"class":1052,"line":1869},[1050,5050,1965],{"class":1089},[1050,5052,1072],{"class":1071},[1050,5054,4561],{"class":1075},[1050,5056,1274],{"class":1071},[1050,5058,1110],{"class":1102},[1050,5060,2594],{"class":1106},[1050,5062,1110],{"class":1102},[1050,5064,2282],{"class":1071},[1050,5066,2690],{"class":1071},[1050,5068,2713],{"class":1067},[1050,5070,5071,5073,5075,5077,5079,5081,5083,5085,5087,5089],{"class":1052,"line":1888},[1050,5072,1965],{"class":1089},[1050,5074,1072],{"class":1071},[1050,5076,4561],{"class":1075},[1050,5078,1274],{"class":1071},[1050,5080,1110],{"class":1102},[1050,5082,2839],{"class":1106},[1050,5084,1110],{"class":1102},[1050,5086,2282],{"class":1071},[1050,5088,1093],{"class":1071},[1050,5090,2894],{"class":1071},[1050,5092,5093,5095,5097,5099,5101,5103,5105,5107,5109,5111,5113,5115,5117,5119,5121,5123,5125],{"class":1052,"line":1905},[1050,5094,2234],{"class":1089},[1050,5096,1072],{"class":1071},[1050,5098,4561],{"class":1075},[1050,5100,1274],{"class":1071},[1050,5102,1110],{"class":1102},[1050,5104,2594],{"class":1106},[1050,5106,1110],{"class":1102},[1050,5108,2282],{"class":1071},[1050,5110,2861],{"class":1479},[1050,5112,2222],{"class":1089},[1050,5114,1072],{"class":1071},[1050,5116,4561],{"class":1075},[1050,5118,1274],{"class":1071},[1050,5120,1110],{"class":1102},[1050,5122,4572],{"class":1106},[1050,5124,1110],{"class":1102},[1050,5126,2464],{"class":1071},[1050,5128,5129],{"class":1052,"line":1910},[1050,5130,2370],{"class":1071},[1050,5132,5133],{"class":1052,"line":1922},[1050,5134,2118],{"class":1067},[1050,5136,5137],{"class":1052,"line":1936},[1050,5138,5139],{"class":1056},"        # Check for slow queries\n",[1050,5141,5142,5144,5146,5148,5150,5152],{"class":1052,"line":1942},[1050,5143,2213],{"class":1063},[1050,5145,2216],{"class":1067},[1050,5147,2219],{"class":1479},[1050,5149,2053],{"class":1116},[1050,5151,1113],{"class":1071},[1050,5153,5154],{"class":1056},"  # 100ms threshold\n",[1050,5156,5157,5159,5161,5163,5165,5167,5169,5171,5173,5175],{"class":1052,"line":1962},[1050,5158,2234],{"class":1089},[1050,5160,1072],{"class":1071},[1050,5162,4561],{"class":1075},[1050,5164,1274],{"class":1071},[1050,5166,1110],{"class":1102},[1050,5168,1761],{"class":1106},[1050,5170,1110],{"class":1102},[1050,5172,2282],{"class":1071},[1050,5174,2690],{"class":1071},[1050,5176,2693],{"class":1116},[1050,5178,5179,5181,5183,5186,5188,5190,5192,5194],{"class":1052,"line":1994},[1050,5180,2234],{"class":1089},[1050,5182,1072],{"class":1071},[1050,5184,5185],{"class":1979},"_handle_slow_query",[1050,5187,1952],{"class":1071},[1050,5189,2136],{"class":1979},[1050,5191,1491],{"class":1071},[1050,5193,2088],{"class":1979},[1050,5195,1991],{"class":1071},[1050,5197,5198],{"class":1052,"line":2022},[1050,5199,2118],{"class":1067},[1050,5201,5202],{"class":1052,"line":2062},[1050,5203,5204],{"class":1056},"        # Check for problematic patterns\n",[1050,5206,5207,5209,5211,5214,5216,5218,5220,5222],{"class":1052,"line":2067},[1050,5208,1965],{"class":1089},[1050,5210,1072],{"class":1071},[1050,5212,5213],{"class":1979},"_check_query_patterns",[1050,5215,1952],{"class":1071},[1050,5217,2136],{"class":1979},[1050,5219,1491],{"class":1071},[1050,5221,2088],{"class":1979},[1050,5223,1991],{"class":1071},[1050,5225,5226],{"class":1052,"line":2104},[1050,5227,1939],{"class":1067},[1050,5229,5230,5232,5235,5237,5239,5241,5243,5245,5247],{"class":1052,"line":2115},[1050,5231,1945],{"class":1199},[1050,5233,5234],{"class":2072}," _handle_slow_query",[1050,5236,1952],{"class":1071},[1050,5238,1956],{"class":1955},[1050,5240,1491],{"class":1071},[1050,5242,2981],{"class":2082},[1050,5244,1491],{"class":1071},[1050,5246,2088],{"class":2082},[1050,5248,1959],{"class":1071},[1050,5250,5251,5253,5256],{"class":1052,"line":2121},[1050,5252,2107],{"class":1925},[1050,5254,5255],{"class":1929},"Handle slow query detection",[1050,5257,1933],{"class":1925},[1050,5259,5260],{"class":1052,"line":2131},[1050,5261,2118],{"class":1067},[1050,5263,5264,5267,5269],{"class":1052,"line":2147},[1050,5265,5266],{"class":1067},"        slow_query_data ",[1050,5268,2096],{"class":1071},[1050,5270,1096],{"class":1071},[1050,5272,5273,5275,5277,5279,5281,5283,5285,5288,5290,5292,5294,5297,5299,5302,5304,5306,5308,5310,5312,5315,5318,5320],{"class":1052,"line":2183},[1050,5274,1173],{"class":1102},[1050,5276,2136],{"class":1106},[1050,5278,1110],{"class":1102},[1050,5280,1113],{"class":1071},[1050,5282,2981],{"class":1067},[1050,5284,2276],{"class":1071},[1050,5286,5287],{"class":1116},"200",[1050,5289,2282],{"class":1071},[1050,5291,4144],{"class":1479},[1050,5293,1183],{"class":1102},[1050,5295,5296],{"class":1106},"...",[1050,5298,1110],{"class":1102},[1050,5300,5301],{"class":1063}," if",[1050,5303,3549],{"class":1948},[1050,5305,1952],{"class":1071},[1050,5307,2136],{"class":1979},[1050,5309,2056],{"class":1071},[1050,5311,2913],{"class":1479},[1050,5313,5314],{"class":1116}," 200",[1050,5316,5317],{"class":1063}," else",[1050,5319,2981],{"class":1067},[1050,5321,1120],{"class":1071},[1050,5323,5324,5326,5328,5330,5332,5334,5336,5338,5340,5342,5344,5346,5348,5350],{"class":1052,"line":2199},[1050,5325,1173],{"class":1102},[1050,5327,2152],{"class":1106},[1050,5329,1110],{"class":1102},[1050,5331,1113],{"class":1071},[1050,5333,2159],{"class":1199},[1050,5335,2162],{"class":1106},[1050,5337,1234],{"class":1186},[1050,5339,2152],{"class":1067},[1050,5341,1480],{"class":1479},[1050,5343,2171],{"class":1116},[1050,5345,2174],{"class":1199},[1050,5347,1203],{"class":1186},[1050,5349,2352],{"class":1106},[1050,5351,1120],{"class":1071},[1050,5353,5354,5356,5359,5361,5363,5365,5367,5369],{"class":1052,"line":2205},[1050,5355,1173],{"class":1102},[1050,5357,5358],{"class":1106},"timestamp",[1050,5360,1110],{"class":1102},[1050,5362,1113],{"class":1071},[1050,5364,3399],{"class":1067},[1050,5366,1072],{"class":1071},[1050,5368,2488],{"class":1979},[1050,5370,5371],{"class":1071},"(),\n",[1050,5373,5374],{"class":1052,"line":2210},[1050,5375,2202],{"class":1071},[1050,5377,5378],{"class":1052,"line":2231},[1050,5379,2118],{"class":1067},[1050,5381,5382],{"class":1052,"line":2249},[1050,5383,5384],{"class":1056},"        # Log slow query\n",[1050,5386,5387,5390,5392,5394,5396,5398,5400,5402,5404,5406],{"class":1052,"line":2292},[1050,5388,5389],{"class":1067},"        logging",[1050,5391,1072],{"class":1071},[1050,5393,1980],{"class":1979},[1050,5395,1952],{"class":1071},[1050,5397,1110],{"class":1102},[1050,5399,1761],{"class":1106},[1050,5401,1110],{"class":1102},[1050,5403,3945],{"class":1071},[1050,5405,2243],{"class":1979},[1050,5407,2246],{"class":1071},[1050,5409,5410,5412,5415,5417,5419,5421,5423,5425,5427,5429],{"class":1052,"line":2304},[1050,5411,2334],{"class":1199},[1050,5413,5414],{"class":1106},"\"Slow query detected: ",[1050,5416,1234],{"class":1186},[1050,5418,2152],{"class":1979},[1050,5420,1480],{"class":1479},[1050,5422,2171],{"class":1116},[1050,5424,2174],{"class":1199},[1050,5426,1203],{"class":1186},[1050,5428,2352],{"class":1106},[1050,5430,1120],{"class":1071},[1050,5432,5433,5435,5437],{"class":1052,"line":2310},[1050,5434,2360],{"class":2295},[1050,5436,2096],{"class":1071},[1050,5438,5439],{"class":1979},"slow_query_data\n",[1050,5441,5442],{"class":1052,"line":2315},[1050,5443,2370],{"class":1071},[1050,5445,5446],{"class":1052,"line":2331},[1050,5447,2118],{"class":1067},[1050,5449,5450],{"class":1052,"line":2357},[1050,5451,5452],{"class":1056},"        # Send alert if configured\n",[1050,5454,5455,5457,5459,5462,5464,5467],{"class":1052,"line":2367},[1050,5456,1965],{"class":1089},[1050,5458,1072],{"class":1071},[1050,5460,5461],{"class":1979},"_send_slow_query_alert",[1050,5463,1952],{"class":1071},[1050,5465,5466],{"class":1979},"slow_query_data",[1050,5468,1991],{"class":1071},[1050,5470,5471],{"class":1052,"line":2373},[1050,5472,1939],{"class":1067},[1050,5474,5475,5477,5480,5482,5484,5486,5488,5490,5492],{"class":1052,"line":2378},[1050,5476,1945],{"class":1199},[1050,5478,5479],{"class":2072}," _check_query_patterns",[1050,5481,1952],{"class":1071},[1050,5483,1956],{"class":1955},[1050,5485,1491],{"class":1071},[1050,5487,2981],{"class":2082},[1050,5489,1491],{"class":1071},[1050,5491,2088],{"class":2082},[1050,5493,1959],{"class":1071},[1050,5495,5496,5498,5501],{"class":1052,"line":2392},[1050,5497,2107],{"class":1925},[1050,5499,5500],{"class":1929},"Check for problematic query patterns",[1050,5502,1933],{"class":1925},[1050,5504,5505],{"class":1052,"line":2402},[1050,5506,2118],{"class":1067},[1050,5508,5509],{"class":1052,"line":2407},[1050,5510,5511],{"class":1056},"        # Check for SELECT N+1 patterns\n",[1050,5513,5514,5516,5518,5521,5523,5525,5527,5529,5532,5534,5536,5538,5541,5543,5545,5547,5549,5551],{"class":1052,"line":2418},[1050,5515,2213],{"class":1063},[1050,5517,1183],{"class":1102},[1050,5519,5520],{"class":1106},"SELECT",[1050,5522,1110],{"class":1102},[1050,5524,2546],{"class":1479},[1050,5526,2981],{"class":1067},[1050,5528,1072],{"class":1071},[1050,5530,5531],{"class":1979},"upper",[1050,5533,4199],{"class":1071},[1050,5535,2919],{"class":1479},[1050,5537,1183],{"class":1102},[1050,5539,5540],{"class":1106},"WHERE",[1050,5542,1110],{"class":1102},[1050,5544,2546],{"class":1479},[1050,5546,2981],{"class":1067},[1050,5548,1072],{"class":1071},[1050,5550,5531],{"class":1979},[1050,5552,2827],{"class":1071},[1050,5554,5555,5557,5559,5561,5563,5566,5568,5570],{"class":1052,"line":2423},[1050,5556,2511],{"class":1067},[1050,5558,2096],{"class":1071},[1050,5560,2222],{"class":1089},[1050,5562,1072],{"class":1071},[1050,5564,5565],{"class":1979},"_extract_pattern",[1050,5567,1952],{"class":1071},[1050,5569,2136],{"class":1979},[1050,5571,1991],{"class":1071},[1050,5573,5574],{"class":1052,"line":2445},[1050,5575,2499],{"class":1067},[1050,5577,5578,5580,5582,5584,5586,5588,5590],{"class":1052,"line":2467},[1050,5579,2537],{"class":1063},[1050,5581,2540],{"class":1067},[1050,5583,2432],{"class":1479},[1050,5585,2222],{"class":1089},[1050,5587,1072],{"class":1071},[1050,5589,4548],{"class":1075},[1050,5591,1919],{"class":1071},[1050,5593,5594,5596,5598,5600,5602,5604,5607,5609,5611,5613,5615,5617],{"class":1052,"line":2496},[1050,5595,4888],{"class":1089},[1050,5597,1072],{"class":1071},[1050,5599,4548],{"class":1075},[1050,5601,1274],{"class":1071},[1050,5603,2562],{"class":1075},[1050,5605,5606],{"class":1071},"][",[1050,5608,1110],{"class":1102},[1050,5610,2577],{"class":1106},[1050,5612,1110],{"class":1102},[1050,5614,2282],{"class":1071},[1050,5616,2690],{"class":1071},[1050,5618,2693],{"class":1116},[1050,5620,5621],{"class":1052,"line":2502},[1050,5622,5623],{"class":1067},"                \n",[1050,5625,5626],{"class":1052,"line":2508},[1050,5627,5628],{"class":1056},"                # Alert if pattern repeats too frequently\n",[1050,5630,5631,5634,5636,5638,5640,5642,5644,5646,5648,5650,5652,5654,5656,5658],{"class":1052,"line":2529},[1050,5632,5633],{"class":1063},"                if",[1050,5635,2222],{"class":1089},[1050,5637,1072],{"class":1071},[1050,5639,4548],{"class":1075},[1050,5641,1274],{"class":1071},[1050,5643,2562],{"class":1075},[1050,5645,5606],{"class":1071},[1050,5647,1110],{"class":1102},[1050,5649,2577],{"class":1106},[1050,5651,1110],{"class":1102},[1050,5653,2282],{"class":1071},[1050,5655,2913],{"class":1479},[1050,5657,2916],{"class":1116},[1050,5659,1919],{"class":1071},[1050,5661,5662,5665,5667,5670,5672,5674],{"class":1052,"line":2534},[1050,5663,5664],{"class":1089},"                    self",[1050,5666,1072],{"class":1071},[1050,5668,5669],{"class":1979},"_handle_n_plus_one_detection",[1050,5671,1952],{"class":1071},[1050,5673,2562],{"class":1979},[1050,5675,1991],{"class":1071},[1050,5677,5678,5681],{"class":1052,"line":2554},[1050,5679,5680],{"class":1063},"            else",[1050,5682,1919],{"class":1071},[1050,5684,5685,5687,5689,5691,5693,5695,5697,5699],{"class":1052,"line":2571},[1050,5686,4888],{"class":1089},[1050,5688,1072],{"class":1071},[1050,5690,4548],{"class":1075},[1050,5692,1274],{"class":1071},[1050,5694,2562],{"class":1075},[1050,5696,2282],{"class":1071},[1050,5698,1093],{"class":1071},[1050,5700,1096],{"class":1071},[1050,5702,5703,5705,5707,5709,5711,5713],{"class":1052,"line":2589},[1050,5704,2574],{"class":1102},[1050,5706,2577],{"class":1106},[1050,5708,1110],{"class":1102},[1050,5710,1113],{"class":1071},[1050,5712,1117],{"class":1116},[1050,5714,1120],{"class":1071},[1050,5716,5717,5719,5722,5724,5726,5728,5730,5732],{"class":1052,"line":2605},[1050,5718,2574],{"class":1102},[1050,5720,5721],{"class":1106},"first_seen",[1050,5723,1110],{"class":1102},[1050,5725,1113],{"class":1071},[1050,5727,3399],{"class":1067},[1050,5729,1072],{"class":1071},[1050,5731,2488],{"class":1979},[1050,5733,5371],{"class":1071},[1050,5735,5736],{"class":1052,"line":2621},[1050,5737,2650],{"class":1071},[1050,5739,5740],{"class":1052,"line":2647},[1050,5741,1939],{"class":1067},[1050,5743,5744,5746,5749,5751,5753,5755,5757],{"class":1052,"line":2653},[1050,5745,1945],{"class":1199},[1050,5747,5748],{"class":2072}," _extract_pattern",[1050,5750,1952],{"class":1071},[1050,5752,1956],{"class":1955},[1050,5754,1491],{"class":1071},[1050,5756,2981],{"class":2082},[1050,5758,1959],{"class":1071},[1050,5760,5761,5763,5766],{"class":1052,"line":2658},[1050,5762,2107],{"class":1925},[1050,5764,5765],{"class":1929},"Extract query pattern for N+1 detection",[1050,5767,1933],{"class":1925},[1050,5769,5770,5772],{"class":1052,"line":2674},[1050,5771,2999],{"class":1063},[1050,5773,3002],{"class":1067},[1050,5775,5776],{"class":1052,"line":2696},[1050,5777,2118],{"class":1067},[1050,5779,5780],{"class":1052,"line":2716},[1050,5781,5782],{"class":1056},"        # Simplified pattern extraction\n",[1050,5784,5785,5787,5789,5791,5793,5795,5797,5799,5801,5804,5806,5808,5810,5812,5814,5816,5818,5820],{"class":1052,"line":2756},[1050,5786,3019],{"class":1067},[1050,5788,2096],{"class":1071},[1050,5790,3024],{"class":1067},[1050,5792,1072],{"class":1071},[1050,5794,3029],{"class":1979},[1050,5796,1952],{"class":1071},[1050,5798,3034],{"class":1199},[1050,5800,1110],{"class":1102},[1050,5802,5803],{"class":3106},"\\d",[1050,5805,3110],{"class":3053},[1050,5807,1110],{"class":1102},[1050,5809,1491],{"class":1071},[1050,5811,1183],{"class":1102},[1050,5813,3122],{"class":1106},[1050,5815,1110],{"class":1102},[1050,5817,1491],{"class":1071},[1050,5819,2981],{"class":1979},[1050,5821,1991],{"class":1071},[1050,5823,5824,5826,5828,5830,5832,5834,5836,5838,5840,5842,5844,5846,5848,5850,5852,5854,5856,5858,5860,5862,5864,5866,5868],{"class":1052,"line":2794},[1050,5825,3019],{"class":1067},[1050,5827,2096],{"class":1071},[1050,5829,3024],{"class":1067},[1050,5831,1072],{"class":1071},[1050,5833,3029],{"class":1979},[1050,5835,1952],{"class":1071},[1050,5837,3034],{"class":1199},[1050,5839,2162],{"class":1102},[1050,5841,1110],{"class":3039},[1050,5843,1274],{"class":3042},[1050,5845,3045],{"class":1479},[1050,5847,1110],{"class":3048},[1050,5849,2282],{"class":3042},[1050,5851,1480],{"class":3053},[1050,5853,1110],{"class":3039},[1050,5855,2162],{"class":1102},[1050,5857,1491],{"class":1071},[1050,5859,3062],{"class":1102},[1050,5861,3065],{"class":1106},[1050,5863,2162],{"class":1102},[1050,5865,1491],{"class":1071},[1050,5867,2810],{"class":1979},[1050,5869,1991],{"class":1071},[1050,5871,5872,5874,5876,5878,5880,5882],{"class":1052,"line":2799},[1050,5873,2956],{"class":1063},[1050,5875,2810],{"class":1067},[1050,5877,2276],{"class":1071},[1050,5879,2279],{"class":1116},[1050,5881,2282],{"class":1071},[1050,5883,5884],{"class":1056},"  # Limit pattern length\n",[1050,5886,5887],{"class":1052,"line":2805},[1050,5888,1939],{"class":1067},[1050,5890,5891,5893,5896,5898,5900,5902,5904],{"class":1052,"line":2830},[1050,5892,1945],{"class":1199},[1050,5894,5895],{"class":2072}," _handle_n_plus_one_detection",[1050,5897,1952],{"class":1071},[1050,5899,1956],{"class":1955},[1050,5901,1491],{"class":1071},[1050,5903,2810],{"class":2082},[1050,5905,1959],{"class":1071},[1050,5907,5908,5910,5913],{"class":1052,"line":2876},[1050,5909,2107],{"class":1925},[1050,5911,5912],{"class":1929},"Handle N+1 query detection",[1050,5914,1933],{"class":1925},[1050,5916,5917],{"class":1052,"line":2897},[1050,5918,2118],{"class":1067},[1050,5920,5921,5923,5925,5927,5929,5931,5933,5935,5937,5940],{"class":1052,"line":2943},[1050,5922,5389],{"class":1067},[1050,5924,1072],{"class":1071},[1050,5926,1980],{"class":1979},[1050,5928,1952],{"class":1071},[1050,5930,1110],{"class":1102},[1050,5932,3940],{"class":1106},[1050,5934,1110],{"class":1102},[1050,5936,3945],{"class":1071},[1050,5938,5939],{"class":1979},"error",[1050,5941,2246],{"class":1071},[1050,5943,5944,5946,5949,5951,5953,5955,5957],{"class":1052,"line":2948},[1050,5945,2334],{"class":1199},[1050,5947,5948],{"class":1106},"\"Potential N+1 query detected: ",[1050,5950,1234],{"class":1186},[1050,5952,2562],{"class":1979},[1050,5954,1203],{"class":1186},[1050,5956,2162],{"class":1106},[1050,5958,1120],{"class":1071},[1050,5960,5961,5963,5966,5968,5970,5972,5974,5976,5978,5980,5982,5984,5986,5988,5990,5992,5994,5996,5998,6000,6002,6004],{"class":1052,"line":2953},[1050,5962,2360],{"class":2295},[1050,5964,5965],{"class":1071},"={",[1050,5967,1110],{"class":1102},[1050,5969,2562],{"class":1106},[1050,5971,1110],{"class":1102},[1050,5973,1113],{"class":1071},[1050,5975,2810],{"class":1979},[1050,5977,1491],{"class":1071},[1050,5979,1183],{"class":1102},[1050,5981,2577],{"class":1106},[1050,5983,1110],{"class":1102},[1050,5985,1113],{"class":1071},[1050,5987,2222],{"class":1089},[1050,5989,1072],{"class":1071},[1050,5991,4548],{"class":1075},[1050,5993,1274],{"class":1071},[1050,5995,2562],{"class":1075},[1050,5997,5606],{"class":1071},[1050,5999,1110],{"class":1102},[1050,6001,2577],{"class":1106},[1050,6003,1110],{"class":1102},[1050,6005,6006],{"class":1071},"]}\n",[1050,6008,6009],{"class":1052,"line":2962},[1050,6010,2370],{"class":1071},[1050,6012,6013],{"class":1052,"line":2967},[1050,6014,1939],{"class":1067},[1050,6016,6017,6019,6022,6024,6026,6028,6030],{"class":1052,"line":2986},[1050,6018,1945],{"class":1199},[1050,6020,6021],{"class":2072}," _send_slow_query_alert",[1050,6023,1952],{"class":1071},[1050,6025,1956],{"class":1955},[1050,6027,1491],{"class":1071},[1050,6029,2453],{"class":2082},[1050,6031,1959],{"class":1071},[1050,6033,6034,6036,6039],{"class":1052,"line":2996},[1050,6035,2107],{"class":1925},[1050,6037,6038],{"class":1929},"Send alert for slow queries",[1050,6040,1933],{"class":1925},[1050,6042,6043],{"class":1052,"line":3005},[1050,6044,2118],{"class":1067},[1050,6046,6047],{"class":1052,"line":3010},[1050,6048,6049],{"class":1056},"        # Implementation depends on your alerting system\n",[1050,6051,6052],{"class":1052,"line":3016},[1050,6053,6054],{"class":1056},"        # Could send email, Slack message, etc.\n",[1050,6056,6057],{"class":1052,"line":3076},[1050,6058,6059],{"class":1063},"        pass\n",[1050,6061,6062],{"class":1052,"line":3081},[1050,6063,1939],{"class":1067},[1050,6065,6066,6068,6071,6073,6075],{"class":1052,"line":3087},[1050,6067,1945],{"class":1199},[1050,6069,6070],{"class":2072}," get_current_stats",[1050,6072,1952],{"class":1071},[1050,6074,1956],{"class":1955},[1050,6076,1959],{"class":1071},[1050,6078,6079,6081,6084],{"class":1052,"line":3133},[1050,6080,2107],{"class":1925},[1050,6082,6083],{"class":1929},"Get current monitoring statistics",[1050,6085,1933],{"class":1925},[1050,6087,6088,6090,6092,6094,6096,6098,6101],{"class":1052,"line":3138},[1050,6089,2956],{"class":1063},[1050,6091,2222],{"class":1089},[1050,6093,1072],{"class":1071},[1050,6095,4561],{"class":1075},[1050,6097,1072],{"class":1071},[1050,6099,6100],{"class":1979},"copy",[1050,6102,3335],{"class":1071},[1050,6104,6105],{"class":1052,"line":3144},[1050,6106,1083],{"emptyLinePlaceholder":1082},[1050,6108,6109],{"class":1052,"line":3200},[1050,6110,6111],{"class":1056},"# Management command for query monitoring\n",[1050,6113,6114,6116,6119,6121,6125],{"class":1052,"line":3205},[1050,6115,1368],{"class":1199},[1050,6117,6118],{"class":1915}," Command",[1050,6120,1952],{"class":1071},[1050,6122,6124],{"class":6123},"sYn-s","BaseCommand",[1050,6126,1959],{"class":1071},[1050,6128,6129,6131,6134],{"class":1052,"line":3211},[1050,6130,1926],{"class":1925},[1050,6132,6133],{"class":1929},"Management command to monitor database queries",[1050,6135,1933],{"class":1925},[1050,6137,6138],{"class":1052,"line":3239},[1050,6139,1939],{"class":1067},[1050,6141,6142,6145,6147,6149,6152],{"class":1052,"line":3244},[1050,6143,6144],{"class":1948},"    help",[1050,6146,1093],{"class":1071},[1050,6148,1183],{"class":1102},[1050,6150,6151],{"class":1106},"Monitor database queries in real-time",[1050,6153,6154],{"class":1102},"'\n",[1050,6156,6157],{"class":1052,"line":3252},[1050,6158,1939],{"class":1067},[1050,6160,6161,6163,6166,6168,6170,6172,6175],{"class":1052,"line":3257},[1050,6162,1945],{"class":1199},[1050,6164,6165],{"class":2072}," add_arguments",[1050,6167,1952],{"class":1071},[1050,6169,1956],{"class":1955},[1050,6171,1491],{"class":1071},[1050,6173,6174],{"class":2082}," parser",[1050,6176,1959],{"class":1071},[1050,6178,6179,6182,6184,6187,6189,6191,6194,6196,6198,6201,6203,6205,6207,6210,6212,6215,6217,6220,6222,6224,6227,6229],{"class":1052,"line":3263},[1050,6180,6181],{"class":1067},"        parser",[1050,6183,1072],{"class":1071},[1050,6185,6186],{"class":1979},"add_argument",[1050,6188,1952],{"class":1071},[1050,6190,1110],{"class":1102},[1050,6192,6193],{"class":1106},"--duration",[1050,6195,1110],{"class":1102},[1050,6197,1491],{"class":1071},[1050,6199,6200],{"class":2295}," type",[1050,6202,2096],{"class":1071},[1050,6204,4310],{"class":2475},[1050,6206,1491],{"class":1071},[1050,6208,6209],{"class":2295}," default",[1050,6211,2096],{"class":1071},[1050,6213,6214],{"class":1116},"60",[1050,6216,1491],{"class":1071},[1050,6218,6219],{"class":2295}," help",[1050,6221,2096],{"class":1071},[1050,6223,1110],{"class":1102},[1050,6225,6226],{"class":1106},"Monitoring duration in seconds",[1050,6228,1110],{"class":1102},[1050,6230,1991],{"class":1071},[1050,6232,6233,6235,6237,6239,6241,6243,6246,6248,6250,6252,6254,6256,6258,6260,6262,6264,6266,6268,6270,6272,6275,6277],{"class":1052,"line":3273},[1050,6234,6181],{"class":1067},[1050,6236,1072],{"class":1071},[1050,6238,6186],{"class":1979},[1050,6240,1952],{"class":1071},[1050,6242,1110],{"class":1102},[1050,6244,6245],{"class":1106},"--threshold",[1050,6247,1110],{"class":1102},[1050,6249,1491],{"class":1071},[1050,6251,6200],{"class":2295},[1050,6253,2096],{"class":1071},[1050,6255,3576],{"class":2475},[1050,6257,1491],{"class":1071},[1050,6259,6209],{"class":2295},[1050,6261,2096],{"class":1071},[1050,6263,4934],{"class":1116},[1050,6265,1491],{"class":1071},[1050,6267,6219],{"class":2295},[1050,6269,2096],{"class":1071},[1050,6271,1110],{"class":1102},[1050,6273,6274],{"class":1106},"Slow query threshold in seconds",[1050,6276,1110],{"class":1102},[1050,6278,1991],{"class":1071},[1050,6280,6281],{"class":1052,"line":3283},[1050,6282,1939],{"class":1067},[1050,6284,6285,6287,6290,6292,6294,6296,6299,6302,6304,6307,6310],{"class":1052,"line":3288},[1050,6286,1945],{"class":1199},[1050,6288,6289],{"class":2072}," handle",[1050,6291,1952],{"class":1071},[1050,6293,1956],{"class":1955},[1050,6295,1491],{"class":1071},[1050,6297,6298],{"class":1479}," *",[1050,6300,6301],{"class":2082},"args",[1050,6303,1491],{"class":1071},[1050,6305,6306],{"class":1479}," **",[1050,6308,6309],{"class":2082},"options",[1050,6311,1959],{"class":1071},[1050,6313,6314,6317,6319,6321],{"class":1052,"line":3306},[1050,6315,6316],{"class":1067},"        monitor ",[1050,6318,2096],{"class":1071},[1050,6320,4512],{"class":1979},[1050,6322,3335],{"class":1071},[1050,6324,6325,6328,6330,6332,6334,6337,6339,6341,6344,6346],{"class":1052,"line":3321},[1050,6326,6327],{"class":1067},"        monitor",[1050,6329,1072],{"class":1071},[1050,6331,2029],{"class":1075},[1050,6333,1093],{"class":1071},[1050,6335,6336],{"class":1067}," options",[1050,6338,1274],{"class":1071},[1050,6340,1110],{"class":1102},[1050,6342,6343],{"class":1106},"threshold",[1050,6345,1110],{"class":1102},[1050,6347,2464],{"class":1071},[1050,6349,6350],{"class":1052,"line":3338},[1050,6351,2118],{"class":1067},[1050,6353,6354,6356,6358,6361,6363,6366,6368,6370,6373,6375],{"class":1052,"line":3343},[1050,6355,1965],{"class":1089},[1050,6357,1072],{"class":1071},[1050,6359,6360],{"class":1075},"stdout",[1050,6362,1072],{"class":1071},[1050,6364,6365],{"class":1979},"write",[1050,6367,1952],{"class":1071},[1050,6369,1110],{"class":1102},[1050,6371,6372],{"class":1106},"Starting query monitoring...",[1050,6374,1110],{"class":1102},[1050,6376,1991],{"class":1071},[1050,6378,6379,6381,6383,6386],{"class":1052,"line":3362},[1050,6380,6327],{"class":1067},[1050,6382,1072],{"class":1071},[1050,6384,6385],{"class":1979},"start_monitoring",[1050,6387,3335],{"class":1071},[1050,6389,6390],{"class":1052,"line":3368},[1050,6391,2118],{"class":1067},[1050,6393,6394,6396],{"class":1052,"line":3386},[1050,6395,4375],{"class":1063},[1050,6397,1919],{"class":1071},[1050,6399,6400],{"class":1052,"line":3391},[1050,6401,6402],{"class":1056},"            # Monitor for specified duration\n",[1050,6404,6405,6407,6410,6412,6415,6417,6419,6421,6423,6425,6427],{"class":1052,"line":3408},[1050,6406,4181],{"class":1063},[1050,6408,6409],{"class":1067}," i ",[1050,6411,2432],{"class":1063},[1050,6413,6414],{"class":1948}," range",[1050,6416,1952],{"class":1071},[1050,6418,6309],{"class":1979},[1050,6420,1274],{"class":1071},[1050,6422,1110],{"class":1102},[1050,6424,2152],{"class":1106},[1050,6426,1110],{"class":1102},[1050,6428,6429],{"class":1071},"]):\n",[1050,6431,6432,6435,6437,6439,6441,6444],{"class":1052,"line":3429},[1050,6433,6434],{"class":1067},"                time",[1050,6436,1072],{"class":1071},[1050,6438,4929],{"class":1979},[1050,6440,1952],{"class":1071},[1050,6442,6443],{"class":1116},"1",[1050,6445,1991],{"class":1071},[1050,6447,6448],{"class":1052,"line":3445},[1050,6449,5623],{"class":1067},[1050,6451,6452,6454,6456,6459,6461,6464,6466,6468],{"class":1052,"line":3450},[1050,6453,5633],{"class":1063},[1050,6455,6409],{"class":1067},[1050,6457,6458],{"class":1479},"%",[1050,6460,2916],{"class":1116},[1050,6462,6463],{"class":1479}," ==",[1050,6465,2584],{"class":1116},[1050,6467,1113],{"class":1071},[1050,6469,6470],{"class":1056},"  # Report every 10 seconds\n",[1050,6472,6473,6476,6478,6481,6483,6486],{"class":1052,"line":3456},[1050,6474,6475],{"class":1067},"                    stats ",[1050,6477,2096],{"class":1071},[1050,6479,6480],{"class":1067}," monitor",[1050,6482,1072],{"class":1071},[1050,6484,6485],{"class":1979},"get_current_stats",[1050,6487,3335],{"class":1071},[1050,6489,6490,6492,6494,6496,6498,6500],{"class":1052,"line":3482},[1050,6491,5664],{"class":1089},[1050,6493,1072],{"class":1071},[1050,6495,6360],{"class":1075},[1050,6497,1072],{"class":1071},[1050,6499,6365],{"class":1979},[1050,6501,2246],{"class":1071},[1050,6503,6504,6507,6510,6512,6514,6516,6518,6520,6522,6524,6526],{"class":1052,"line":3487},[1050,6505,6506],{"class":1199},"                        f",[1050,6508,6509],{"class":1106},"\"Queries: ",[1050,6511,1234],{"class":1186},[1050,6513,2738],{"class":1979},[1050,6515,1274],{"class":1071},[1050,6517,1110],{"class":1102},[1050,6519,4572],{"class":1106},[1050,6521,1110],{"class":1102},[1050,6523,2282],{"class":1071},[1050,6525,1203],{"class":1186},[1050,6527,6528],{"class":1106},", \"\n",[1050,6530,6531,6533,6536,6538,6540,6542,6544,6546,6548,6550,6552],{"class":1052,"line":3495},[1050,6532,6506],{"class":1199},[1050,6534,6535],{"class":1106},"\"Slow: ",[1050,6537,1234],{"class":1186},[1050,6539,2738],{"class":1979},[1050,6541,1274],{"class":1071},[1050,6543,1110],{"class":1102},[1050,6545,1761],{"class":1106},[1050,6547,1110],{"class":1102},[1050,6549,2282],{"class":1071},[1050,6551,1203],{"class":1186},[1050,6553,6528],{"class":1106},[1050,6555,6556,6558,6561,6563,6565,6567,6569,6571,6573,6575,6577,6579,6581,6583],{"class":1052,"line":3500},[1050,6557,6506],{"class":1199},[1050,6559,6560],{"class":1106},"\"Avg: ",[1050,6562,1234],{"class":1186},[1050,6564,2738],{"class":1979},[1050,6566,1274],{"class":1071},[1050,6568,1110],{"class":1102},[1050,6570,2839],{"class":1106},[1050,6572,1110],{"class":1102},[1050,6574,2282],{"class":1071},[1050,6576,1480],{"class":1479},[1050,6578,2171],{"class":1116},[1050,6580,2174],{"class":1199},[1050,6582,1203],{"class":1186},[1050,6584,6585],{"class":1106},"ms\"\n",[1050,6587,6588],{"class":1052,"line":3526},[1050,6589,6590],{"class":1071},"                    )\n",[1050,6592,6593],{"class":1052,"line":3536},[1050,6594,2118],{"class":1067},[1050,6596,6597,6599,6602],{"class":1052,"line":3541},[1050,6598,4426],{"class":1063},[1050,6600,6601],{"class":2475}," KeyboardInterrupt",[1050,6603,1919],{"class":1071},[1050,6605,6606,6608,6610,6612,6614,6616,6618,6620,6623,6625],{"class":1052,"line":3563},[1050,6607,2234],{"class":1089},[1050,6609,1072],{"class":1071},[1050,6611,6360],{"class":1075},[1050,6613,1072],{"class":1071},[1050,6615,6365],{"class":1979},[1050,6617,1952],{"class":1071},[1050,6619,1110],{"class":1102},[1050,6621,6622],{"class":1106},"Monitoring interrupted by user",[1050,6624,1110],{"class":1102},[1050,6626,1991],{"class":1071},[1050,6628,6629],{"class":1052,"line":3611},[1050,6630,2118],{"class":1067},[1050,6632,6633,6636],{"class":1052,"line":3628},[1050,6634,6635],{"class":1063},"        finally",[1050,6637,1919],{"class":1071},[1050,6639,6640,6643,6645,6648],{"class":1052,"line":3633},[1050,6641,6642],{"class":1067},"            monitor",[1050,6644,1072],{"class":1071},[1050,6646,6647],{"class":1979},"stop_monitoring",[1050,6649,3335],{"class":1071},[1050,6651,6652,6655,6657,6659,6661,6663],{"class":1052,"line":3639},[1050,6653,6654],{"class":1067},"            final_stats ",[1050,6656,2096],{"class":1071},[1050,6658,6480],{"class":1067},[1050,6660,1072],{"class":1071},[1050,6662,6485],{"class":1979},[1050,6664,3335],{"class":1071},[1050,6666,6667],{"class":1052,"line":3649},[1050,6668,2499],{"class":1067},[1050,6670,6671,6673,6675,6677,6679,6681,6683,6685,6688,6691,6693],{"class":1052,"line":3669},[1050,6672,2234],{"class":1089},[1050,6674,1072],{"class":1071},[1050,6676,6360],{"class":1075},[1050,6678,1072],{"class":1071},[1050,6680,6365],{"class":1979},[1050,6682,1952],{"class":1071},[1050,6684,1110],{"class":1102},[1050,6686,6687],{"class":1089},"\\n",[1050,6689,6690],{"class":1106},"=== Final Statistics ===",[1050,6692,1110],{"class":1102},[1050,6694,1991],{"class":1071},[1050,6696,6697,6699,6701,6703,6705,6707,6709,6712,6715,6717,6720,6722,6724,6726,6728,6730,6732,6734],{"class":1052,"line":3689},[1050,6698,2234],{"class":1089},[1050,6700,1072],{"class":1071},[1050,6702,6360],{"class":1075},[1050,6704,1072],{"class":1071},[1050,6706,6365],{"class":1979},[1050,6708,1952],{"class":1071},[1050,6710,6711],{"class":1199},"f",[1050,6713,6714],{"class":1106},"\"Total queries: ",[1050,6716,1234],{"class":1186},[1050,6718,6719],{"class":1979},"final_stats",[1050,6721,1274],{"class":1071},[1050,6723,1110],{"class":1102},[1050,6725,4572],{"class":1106},[1050,6727,1110],{"class":1102},[1050,6729,2282],{"class":1071},[1050,6731,1203],{"class":1186},[1050,6733,2162],{"class":1106},[1050,6735,1991],{"class":1071},[1050,6737,6738,6740,6742,6744,6746,6748,6750,6752,6755,6757,6759,6761,6763,6765,6767,6769,6771,6773],{"class":1052,"line":3706},[1050,6739,2234],{"class":1089},[1050,6741,1072],{"class":1071},[1050,6743,6360],{"class":1075},[1050,6745,1072],{"class":1071},[1050,6747,6365],{"class":1979},[1050,6749,1952],{"class":1071},[1050,6751,6711],{"class":1199},[1050,6753,6754],{"class":1106},"\"Slow queries: ",[1050,6756,1234],{"class":1186},[1050,6758,6719],{"class":1979},[1050,6760,1274],{"class":1071},[1050,6762,1110],{"class":1102},[1050,6764,1761],{"class":1106},[1050,6766,1110],{"class":1102},[1050,6768,2282],{"class":1071},[1050,6770,1203],{"class":1186},[1050,6772,2162],{"class":1106},[1050,6774,1991],{"class":1071},[1050,6776,6777,6779,6781,6783,6785,6787,6789,6791,6794,6796,6798,6800,6802,6804,6806,6808,6810,6812,6814,6816,6818],{"class":1052,"line":3739},[1050,6778,2234],{"class":1089},[1050,6780,1072],{"class":1071},[1050,6782,6360],{"class":1075},[1050,6784,1072],{"class":1071},[1050,6786,6365],{"class":1979},[1050,6788,1952],{"class":1071},[1050,6790,6711],{"class":1199},[1050,6792,6793],{"class":1106},"\"Average time: ",[1050,6795,1234],{"class":1186},[1050,6797,6719],{"class":1979},[1050,6799,1274],{"class":1071},[1050,6801,1110],{"class":1102},[1050,6803,2839],{"class":1106},[1050,6805,1110],{"class":1102},[1050,6807,2282],{"class":1071},[1050,6809,1480],{"class":1479},[1050,6811,2171],{"class":1116},[1050,6813,2174],{"class":1199},[1050,6815,1203],{"class":1186},[1050,6817,2352],{"class":1106},[1050,6819,1991],{"class":1071},[1050,6821,6822,6824,6826,6828,6830,6832,6834,6836,6839,6841,6843,6845,6847,6849,6851,6853,6855,6857,6860],{"class":1052,"line":3771},[1050,6823,2234],{"class":1089},[1050,6825,1072],{"class":1071},[1050,6827,6360],{"class":1075},[1050,6829,1072],{"class":1071},[1050,6831,6365],{"class":1979},[1050,6833,1952],{"class":1071},[1050,6835,6711],{"class":1199},[1050,6837,6838],{"class":1106},"\"Total time: ",[1050,6840,1234],{"class":1186},[1050,6842,6719],{"class":1979},[1050,6844,1274],{"class":1071},[1050,6846,1110],{"class":1102},[1050,6848,2594],{"class":1106},[1050,6850,1110],{"class":1102},[1050,6852,2282],{"class":1071},[1050,6854,2174],{"class":1199},[1050,6856,1203],{"class":1186},[1050,6858,6859],{"class":1106},"s\"",[1050,6861,1991],{"class":1071},[1030,6863,6865],{"id":6864},"performance-metrics-collection","Performance Metrics Collection",[1035,6867,6869],{"id":6868},"comprehensive-metrics-system","Comprehensive Metrics System",[1040,6871,6873],{"className":1042,"code":6872,"language":1044,"meta":1045,"style":1045},"# models.py - Performance metrics storage\nfrom django.db import models\nfrom django.contrib.auth.models import User\n\nclass PerformanceMetric(models.Model):\n    \"\"\"Store performance metrics for analysis\"\"\"\n    \n    timestamp = models.DateTimeField(auto_now_add=True)\n    path = models.CharField(max_length=255)\n    method = models.CharField(max_length=10)\n    \n    # Query metrics\n    query_count = models.PositiveIntegerField()\n    query_time = models.FloatField()  # in seconds\n    \n    # Request metrics\n    request_time = models.FloatField()  # in seconds\n    response_size = models.PositiveIntegerField(null=True, blank=True)\n    status_code = models.PositiveIntegerField()\n    \n    # User context\n    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)\n    user_agent = models.TextField(blank=True)\n    ip_address = models.GenericIPAddressField(null=True, blank=True)\n    \n    # Additional metadata\n    metadata = models.JSONField(default=dict, blank=True)\n    \n    class Meta:\n        indexes = [\n            models.Index(fields=['timestamp', 'path']),\n            models.Index(fields=['query_count']),\n            models.Index(fields=['query_time']),\n            models.Index(fields=['request_time']),\n        ]\n\nclass SlowQuery(models.Model):\n    \"\"\"Store slow query information\"\"\"\n    \n    timestamp = models.DateTimeField(auto_now_add=True)\n    sql = models.TextField()\n    duration = models.FloatField()  # in seconds\n    \n    # Query context\n    path = models.CharField(max_length=255, blank=True)\n    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)\n    \n    # Query analysis\n    query_pattern = models.TextField()\n    table_names = models.JSONField(default=list)\n    operation_type = models.CharField(max_length=20)  # SELECT, INSERT, UPDATE, DELETE\n    \n    # Performance impact\n    rows_examined = models.PositiveIntegerField(null=True, blank=True)\n    rows_returned = models.PositiveIntegerField(null=True, blank=True)\n    \n    class Meta:\n        indexes = [\n            models.Index(fields=['timestamp', 'duration']),\n            models.Index(fields=['query_pattern']),\n            models.Index(fields=['operation_type']),\n        ]\n\nclass DatabaseMetrics:\n    \"\"\"Collect and analyze database performance metrics\"\"\"\n    \n    @staticmethod\n    def collect_connection_metrics():\n        \"\"\"Collect database connection metrics\"\"\"\n        \n        metrics = {}\n        \n        # PostgreSQL specific metrics\n        if connection.vendor == 'postgresql':\n            with connection.cursor() as cursor:\n                # Connection statistics\n                cursor.execute(\"\"\"\n                    SELECT \n                        numbackends as active_connections,\n                        xact_commit as transactions_committed,\n                        xact_rollback as transactions_rolled_back,\n                        blks_read as blocks_read,\n                        blks_hit as blocks_hit,\n                        tup_returned as tuples_returned,\n                        tup_fetched as tuples_fetched,\n                        tup_inserted as tuples_inserted,\n                        tup_updated as tuples_updated,\n                        tup_deleted as tuples_deleted\n                    FROM pg_stat_database \n                    WHERE datname = current_database()\n                \"\"\")\n                \n                row = cursor.fetchone()\n                if row:\n                    columns = [desc[0] for desc in cursor.description]\n                    metrics.update(dict(zip(columns, row)))\n                \n                # Lock statistics\n                cursor.execute(\"\"\"\n                    SELECT \n                        mode,\n                        COUNT(*) as lock_count\n                    FROM pg_locks \n                    WHERE database = (SELECT oid FROM pg_database WHERE datname = current_database())\n                    GROUP BY mode\n                \"\"\")\n                \n                lock_stats = {}\n                for mode, count in cursor.fetchall():\n                    lock_stats[f'locks_{mode.lower()}'] = count\n                \n                metrics.update(lock_stats)\n        \n        return metrics\n    \n    @staticmethod\n    def collect_table_metrics():\n        \"\"\"Collect table-level performance metrics\"\"\"\n        \n        table_metrics = {}\n        \n        if connection.vendor == 'postgresql':\n            with connection.cursor() as cursor:\n                cursor.execute(\"\"\"\n                    SELECT \n                        schemaname,\n                        relname as table_name,\n                        seq_scan,\n                        seq_tup_read,\n                        idx_scan,\n                        idx_tup_fetch,\n                        n_tup_ins as inserts,\n                        n_tup_upd as updates,\n                        n_tup_del as deletes,\n                        n_live_tup as live_tuples,\n                        n_dead_tup as dead_tuples,\n                        last_vacuum,\n                        last_autovacuum,\n                        last_analyze,\n                        last_autoanalyze\n                    FROM pg_stat_user_tables\n                    ORDER BY seq_tup_read + idx_tup_fetch DESC\n                \"\"\")\n                \n                columns = [desc[0] for desc in cursor.description]\n                for row in cursor.fetchall():\n                    table_data = dict(zip(columns, row))\n                    table_name = table_data['table_name']\n                    table_metrics[table_name] = table_data\n        \n        return table_metrics\n    \n    @staticmethod\n    def collect_index_metrics():\n        \"\"\"Collect index usage metrics\"\"\"\n        \n        index_metrics = {}\n        \n        if connection.vendor == 'postgresql':\n            with connection.cursor() as cursor:\n                cursor.execute(\"\"\"\n                    SELECT \n                        schemaname,\n                        relname as table_name,\n                        indexrelname as index_name,\n                        idx_scan as scans,\n                        idx_tup_read as tuples_read,\n                        idx_tup_fetch as tuples_fetched,\n                        pg_size_pretty(pg_relation_size(indexrelid)) as size\n                    FROM pg_stat_user_indexes\n                    ORDER BY idx_scan DESC\n                \"\"\")\n                \n                columns = [desc[0] for desc in cursor.description]\n                for row in cursor.fetchall():\n                    index_data = dict(zip(columns, row))\n                    index_name = index_data['index_name']\n                    index_metrics[index_name] = index_data\n        \n        return index_metrics\n    \n    @staticmethod\n    def analyze_query_performance():\n        \"\"\"Analyze query performance patterns\"\"\"\n        \n        analysis = {\n            'slow_queries': [],\n            'frequent_patterns': {},\n            'table_access_patterns': {},\n            'recommendations': []\n        }\n        \n        # Analyze slow queries from the last hour\n        from datetime import timedelta\n        from django.utils import timezone\n        \n        recent_slow_queries = SlowQuery.objects.filter(\n            timestamp__gte=timezone.now() - timedelta(hours=1)\n        ).order_by('-duration')[:20]\n        \n        for slow_query in recent_slow_queries:\n            analysis['slow_queries'].append({\n                'sql': slow_query.sql[:200] + '...',\n                'duration': slow_query.duration,\n                'pattern': slow_query.query_pattern,\n                'timestamp': slow_query.timestamp,\n            })\n        \n        # Analyze query patterns\n        pattern_stats = SlowQuery.objects.filter(\n            timestamp__gte=timezone.now() - timedelta(hours=24)\n        ).values('query_pattern').annotate(\n            count=models.Count('id'),\n            avg_duration=models.Avg('duration'),\n            max_duration=models.Max('duration')\n        ).order_by('-count')[:10]\n        \n        for pattern_stat in pattern_stats:\n            analysis['frequent_patterns'][pattern_stat['query_pattern']] = {\n                'count': pattern_stat['count'],\n                'avg_duration': pattern_stat['avg_duration'],\n                'max_duration': pattern_stat['max_duration'],\n            }\n        \n        # Generate recommendations\n        analysis['recommendations'] = DatabaseMetrics.generate_recommendations(analysis)\n        \n        return analysis\n    \n    @staticmethod\n    def generate_recommendations(analysis):\n        \"\"\"Generate performance recommendations\"\"\"\n        \n        recommendations = []\n        \n        # Check for frequent slow queries\n        for pattern, stats in analysis['frequent_patterns'].items():\n            if stats['count'] > 10 and stats['avg_duration'] > 0.1:\n                recommendations.append({\n                    'type': 'slow_query_pattern',\n                    'severity': 'high',\n                    'message': f\"Query pattern executed {stats['count']} times with average duration {stats['avg_duration']:.3f}s\",\n                    'pattern': pattern,\n                    'suggestion': 'Consider adding indexes or optimizing the query'\n                })\n        \n        # Check for N+1 query patterns\n        select_patterns = [p for p in analysis['frequent_patterns'].keys() if 'SELECT' in p.upper()]\n        for pattern in select_patterns:\n            stats = analysis['frequent_patterns'][pattern]\n            if stats['count'] > 20:\n                recommendations.append({\n                    'type': 'n_plus_one',\n                    'severity': 'medium',\n                    'message': f\"Potential N+1 query pattern detected ({stats['count']} executions)\",\n                    'pattern': pattern,\n                    'suggestion': 'Use select_related() or prefetch_related() to optimize'\n                })\n        \n        return recommendations\n\n# Automated performance monitoring\nclass PerformanceMonitor:\n    \"\"\"Automated performance monitoring and alerting\"\"\"\n    \n    def __init__(self):\n        self.thresholds = {\n            'slow_query_duration': 0.5,  # 500ms\n            'high_query_count': 50,      # 50 queries per request\n            'long_request_time': 5.0,    # 5 seconds\n        }\n    \n    def monitor_performance(self):\n        \"\"\"Run performance monitoring checks\"\"\"\n        \n        alerts = []\n        \n        # Check recent performance metrics\n        recent_metrics = PerformanceMetric.objects.filter(\n            timestamp__gte=timezone.now() - timedelta(minutes=5)\n        )\n        \n        # Check for slow requests\n        slow_requests = recent_metrics.filter(\n            request_time__gte=self.thresholds['long_request_time']\n        )\n        \n        if slow_requests.exists():\n            alerts.append({\n                'type': 'slow_requests',\n                'count': slow_requests.count(),\n                'message': f'{slow_requests.count()} slow requests detected in last 5 minutes'\n            })\n        \n        # Check for high query counts\n        high_query_requests = recent_metrics.filter(\n            query_count__gte=self.thresholds['high_query_count']\n        )\n        \n        if high_query_requests.exists():\n            alerts.append({\n                'type': 'high_query_count',\n                'count': high_query_requests.count(),\n                'message': f'{high_query_requests.count()} requests with high query counts detected'\n            })\n        \n        # Check database connection health\n        db_metrics = DatabaseMetrics.collect_connection_metrics()\n        if db_metrics.get('active_connections', 0) > 80:  # Assuming max 100 connections\n            alerts.append({\n                'type': 'high_connections',\n                'count': db_metrics['active_connections'],\n                'message': f'High number of active connections: {db_metrics[\"active_connections\"]}'\n            })\n        \n        # Send alerts if any issues detected\n        if alerts:\n            self.send_alerts(alerts)\n        \n        return alerts\n    \n    def send_alerts(self, alerts):\n        \"\"\"Send performance alerts\"\"\"\n        \n        # Implementation depends on your alerting system\n        for alert in alerts:\n            logging.getLogger('performance_alerts').error(\n                alert['message'],\n                extra=alert\n            )\n    \n    def cleanup_old_metrics(self, days=30):\n        \"\"\"Clean up old performance metrics\"\"\"\n        \n        cutoff_date = timezone.now() - timedelta(days=days)\n        \n        # Clean up old performance metrics\n        deleted_metrics = PerformanceMetric.objects.filter(\n            timestamp__lt=cutoff_date\n        ).delete()[0]\n        \n        # Clean up old slow queries\n        deleted_queries = SlowQuery.objects.filter(\n            timestamp__lt=cutoff_date\n        ).delete()[0]\n        \n        return {\n            'deleted_metrics': deleted_metrics,\n            'deleted_queries': deleted_queries\n        }\n\n# Management command for performance monitoring\nclass Command(BaseCommand):\n    \"\"\"Performance monitoring management command\"\"\"\n    \n    help = 'Run performance monitoring and analysis'\n    \n    def add_arguments(self, parser):\n        parser.add_argument('--analyze', action='store_true', help='Run performance analysis')\n        parser.add_argument('--monitor', action='store_true', help='Run monitoring checks')\n        parser.add_argument('--cleanup', action='store_true', help='Clean up old metrics')\n        parser.add_argument('--report', action='store_true', help='Generate performance report')\n    \n    def handle(self, *args, **options):\n        monitor = PerformanceMonitor()\n        \n        if options['analyze']:\n            self.stdout.write('Running performance analysis...')\n            analysis = DatabaseMetrics.analyze_query_performance()\n            \n            self.stdout.write(f\"Slow queries found: {len(analysis['slow_queries'])}\")\n            self.stdout.write(f\"Query patterns analyzed: {len(analysis['frequent_patterns'])}\")\n            self.stdout.write(f\"Recommendations: {len(analysis['recommendations'])}\")\n            \n            for rec in analysis['recommendations']:\n                self.stdout.write(f\"  {rec['severity'].upper()}: {rec['message']}\")\n        \n        if options['monitor']:\n            self.stdout.write('Running monitoring checks...')\n            alerts = monitor.monitor_performance()\n            \n            if alerts:\n                self.stdout.write(f\"Alerts generated: {len(alerts)}\")\n                for alert in alerts:\n                    self.stdout.write(f\"  {alert['type']}: {alert['message']}\")\n            else:\n                self.stdout.write('No performance issues detected')\n        \n        if options['cleanup']:\n            self.stdout.write('Cleaning up old metrics...')\n            cleanup_result = monitor.cleanup_old_metrics()\n            self.stdout.write(f\"Deleted {cleanup_result['deleted_metrics']} metrics\")\n            self.stdout.write(f\"Deleted {cleanup_result['deleted_queries']} slow queries\")\n        \n        if options['report']:\n            self.stdout.write('Generating performance report...')\n            self.generate_performance_report()\n    \n    def generate_performance_report(self):\n        \"\"\"Generate comprehensive performance report\"\"\"\n        \n        # Collect metrics\n        db_metrics = DatabaseMetrics.collect_connection_metrics()\n        table_metrics = DatabaseMetrics.collect_table_metrics()\n        index_metrics = DatabaseMetrics.collect_index_metrics()\n        \n        self.stdout.write('\\n=== Database Performance Report ===')\n        \n        # Connection metrics\n        self.stdout.write(f\"\\nConnection Metrics:\")\n        self.stdout.write(f\"  Active connections: {db_metrics.get('active_connections', 'N/A')}\")\n        self.stdout.write(f\"  Transactions committed: {db_metrics.get('transactions_committed', 'N/A')}\")\n        self.stdout.write(f\"  Transactions rolled back: {db_metrics.get('transactions_rolled_back', 'N/A')}\")\n        \n        # Top tables by activity\n        self.stdout.write(f\"\\nTop 5 Most Active Tables:\")\n        sorted_tables = sorted(\n            table_metrics.items(),\n            key=lambda x: (x[1]['seq_tup_read'] or 0) + (x[1]['idx_tup_fetch'] or 0),\n            reverse=True\n        )[:5]\n        \n        for table_name, metrics in sorted_tables:\n            total_reads = (metrics['seq_tup_read'] or 0) + (metrics['idx_tup_fetch'] or 0)\n            self.stdout.write(f\"  {table_name}: {total_reads:,} tuples read\")\n        \n        # Index usage\n        self.stdout.write(f\"\\nTop 5 Most Used Indexes:\")\n        sorted_indexes = sorted(\n            index_metrics.items(),\n            key=lambda x: x[1]['scans'] or 0,\n            reverse=True\n        )[:5]\n        \n        for index_name, metrics in sorted_indexes:\n            self.stdout.write(f\"  {index_name}: {metrics['scans']:,} scans\")\n",[1047,6874,6875,6880,6895,6920,6924,6943,6951,6955,6982,7008,7031,7035,7040,7056,7075,7079,7084,7101,7134,7149,7153,7158,7211,7236,7268,7272,7277,7311,7315,7325,7335,7370,7392,7414,7436,7441,7445,7462,7471,7475,7497,7512,7529,7533,7538,7568,7614,7618,7623,7638,7662,7689,7693,7698,7729,7760,7764,7772,7780,7810,7833,7856,7860,7864,7873,7882,7886,7894,7903,7912,7916,7925,7929,7934,7956,7978,7983,7997,8002,8007,8012,8017,8022,8027,8032,8037,8042,8047,8052,8057,8062,8069,8073,8089,8098,8133,8164,8168,8173,8185,8189,8194,8199,8204,8209,8214,8220,8224,8233,8256,8291,8295,8311,8315,8322,8326,8332,8341,8350,8354,8363,8367,8387,8405,8417,8421,8426,8431,8436,8441,8446,8451,8456,8461,8466,8471,8476,8481,8486,8491,8496,8501,8506,8512,8516,8547,8564,8589,8610,8626,8630,8637,8641,8647,8656,8665,8669,8678,8682,8702,8720,8732,8736,8740,8744,8749,8754,8759,8764,8769,8774,8779,8785,8789,8819,8835,8858,8879,8895,8899,8906,8910,8916,8925,8934,8938,8947,8960,8974,8987,9001,9005,9009,9014,9026,9042,9046,9066,9100,9124,9128,9142,9164,9198,9216,9234,9252,9257,9261,9266,9285,9314,9336,9361,9385,9409,9430,9434,9448,9480,9503,9526,9550,9556,9561,9567,9599,9604,9612,9617,9624,9638,9648,9653,9663,9668,9674,9704,9745,9757,9778,9799,9858,9873,9892,9898,9903,9909,9967,9981,10004,10027,10038,10058,10078,10115,10130,10148,10153,10158,10166,10171,10177,10187,10197,10202,10215,10229,10248,10268,10288,10293,10298,10312,10322,10327,10337,10342,10348,10368,10399,10404,10409,10415,10432,10456,10461,10466,10481,10493,10513,10532,10562,10567,10572,10578,10594,10618,10623,10628,10642,10653,10672,10691,10722,10727,10732,10738,10755,10792,10803,10823,10846,10881,10886,10891,10897,10907,10924,10929,10937,10942,10960,10970,10975,10980,10994,11018,11034,11044,11049,11054,11078,11088,11093,11125,11130,11136,11156,11167,11182,11187,11193,11213,11222,11235,11240,11247,11264,11279,11284,11289,11295,11308,11318,11323,11337,11342,11359,11406,11451,11496,11541,11546,11571,11582,11587,11606,11630,11647,11652,11697,11741,11785,11790,11812,11876,11881,11899,11923,11940,11945,11954,11990,12003,12061,12068,12092,12097,12115,12139,12156,12198,12238,12243,12261,12285,12297,12302,12316,12326,12331,12337,12352,12368,12384,12389,12415,12420,12426,12452,12505,12558,12611,12616,12622,12648,12661,12673,12743,12754,12764,12769,12789,12839,12881,12886,12892,12918,12930,12942,12978,12987,12996,13001,13020],{"__ignoreMap":1045},[1050,6876,6877],{"class":1052,"line":1053},[1050,6878,6879],{"class":1056},"# models.py - Performance metrics storage\n",[1050,6881,6882,6884,6886,6888,6890,6892],{"class":1052,"line":1060},[1050,6883,1872],{"class":1063},[1050,6885,1875],{"class":1067},[1050,6887,1072],{"class":1071},[1050,6889,1880],{"class":1067},[1050,6891,1064],{"class":1063},[1050,6893,6894],{"class":1067}," models\n",[1050,6896,6897,6899,6901,6903,6906,6908,6911,6913,6915,6917],{"class":1052,"line":1079},[1050,6898,1872],{"class":1063},[1050,6900,1875],{"class":1067},[1050,6902,1072],{"class":1071},[1050,6904,6905],{"class":1067},"contrib",[1050,6907,1072],{"class":1071},[1050,6909,6910],{"class":1067},"auth",[1050,6912,1072],{"class":1071},[1050,6914,4389],{"class":1067},[1050,6916,1064],{"class":1063},[1050,6918,6919],{"class":1067}," User\n",[1050,6921,6922],{"class":1052,"line":1086},[1050,6923,1083],{"emptyLinePlaceholder":1082},[1050,6925,6926,6928,6931,6933,6936,6938,6941],{"class":1052,"line":1099},[1050,6927,1368],{"class":1199},[1050,6929,6930],{"class":1915}," PerformanceMetric",[1050,6932,1952],{"class":1071},[1050,6934,6935],{"class":6123},"models",[1050,6937,1072],{"class":1071},[1050,6939,6940],{"class":6123},"Model",[1050,6942,1959],{"class":1071},[1050,6944,6945,6947,6949],{"class":1052,"line":1123},[1050,6946,1926],{"class":1925},[1050,6948,4251],{"class":1929},[1050,6950,1933],{"class":1925},[1050,6952,6953],{"class":1052,"line":1141},[1050,6954,1939],{"class":1067},[1050,6956,6957,6960,6962,6965,6967,6970,6972,6975,6977,6980],{"class":1052,"line":1155},[1050,6958,6959],{"class":1067},"    timestamp ",[1050,6961,2096],{"class":1071},[1050,6963,6964],{"class":1067}," models",[1050,6966,1072],{"class":1071},[1050,6968,6969],{"class":1979},"DateTimeField",[1050,6971,1952],{"class":1071},[1050,6973,6974],{"class":2295},"auto_now_add",[1050,6976,2096],{"class":1071},[1050,6978,6979],{"class":1135},"True",[1050,6981,1991],{"class":1071},[1050,6983,6984,6987,6989,6991,6993,6996,6998,7001,7003,7006],{"class":1052,"line":1170},[1050,6985,6986],{"class":1067},"    path ",[1050,6988,2096],{"class":1071},[1050,6990,6964],{"class":1067},[1050,6992,1072],{"class":1071},[1050,6994,6995],{"class":1979},"CharField",[1050,6997,1952],{"class":1071},[1050,6999,7000],{"class":2295},"max_length",[1050,7002,2096],{"class":1071},[1050,7004,7005],{"class":1116},"255",[1050,7007,1991],{"class":1071},[1050,7009,7010,7013,7015,7017,7019,7021,7023,7025,7027,7029],{"class":1052,"line":1220},[1050,7011,7012],{"class":1067},"    method ",[1050,7014,2096],{"class":1071},[1050,7016,6964],{"class":1067},[1050,7018,1072],{"class":1071},[1050,7020,6995],{"class":1979},[1050,7022,1952],{"class":1071},[1050,7024,7000],{"class":2295},[1050,7026,2096],{"class":1071},[1050,7028,1610],{"class":1116},[1050,7030,1991],{"class":1071},[1050,7032,7033],{"class":1052,"line":1241},[1050,7034,1939],{"class":1067},[1050,7036,7037],{"class":1052,"line":1247},[1050,7038,7039],{"class":1056},"    # Query metrics\n",[1050,7041,7042,7045,7047,7049,7051,7054],{"class":1052,"line":1261},[1050,7043,7044],{"class":1067},"    query_count ",[1050,7046,2096],{"class":1071},[1050,7048,6964],{"class":1067},[1050,7050,1072],{"class":1071},[1050,7052,7053],{"class":1979},"PositiveIntegerField",[1050,7055,3335],{"class":1071},[1050,7057,7058,7061,7063,7065,7067,7070,7072],{"class":1052,"line":1305},[1050,7059,7060],{"class":1067},"    query_time ",[1050,7062,2096],{"class":1071},[1050,7064,6964],{"class":1067},[1050,7066,1072],{"class":1071},[1050,7068,7069],{"class":1979},"FloatField",[1050,7071,4199],{"class":1071},[1050,7073,7074],{"class":1056},"  # in seconds\n",[1050,7076,7077],{"class":1052,"line":1324},[1050,7078,1939],{"class":1067},[1050,7080,7081],{"class":1052,"line":1329},[1050,7082,7083],{"class":1056},"    # Request metrics\n",[1050,7085,7086,7089,7091,7093,7095,7097,7099],{"class":1052,"line":1335},[1050,7087,7088],{"class":1067},"    request_time ",[1050,7090,2096],{"class":1071},[1050,7092,6964],{"class":1067},[1050,7094,1072],{"class":1071},[1050,7096,7069],{"class":1979},[1050,7098,4199],{"class":1071},[1050,7100,7074],{"class":1056},[1050,7102,7103,7106,7108,7110,7112,7114,7116,7119,7121,7123,7125,7128,7130,7132],{"class":1052,"line":1349},[1050,7104,7105],{"class":1067},"    response_size ",[1050,7107,2096],{"class":1071},[1050,7109,6964],{"class":1067},[1050,7111,1072],{"class":1071},[1050,7113,7053],{"class":1979},[1050,7115,1952],{"class":1071},[1050,7117,7118],{"class":2295},"null",[1050,7120,2096],{"class":1071},[1050,7122,6979],{"class":1135},[1050,7124,1491],{"class":1071},[1050,7126,7127],{"class":2295}," blank",[1050,7129,2096],{"class":1071},[1050,7131,6979],{"class":1135},[1050,7133,1991],{"class":1071},[1050,7135,7136,7139,7141,7143,7145,7147],{"class":1052,"line":1363},[1050,7137,7138],{"class":1067},"    status_code ",[1050,7140,2096],{"class":1071},[1050,7142,6964],{"class":1067},[1050,7144,1072],{"class":1071},[1050,7146,7053],{"class":1979},[1050,7148,3335],{"class":1071},[1050,7150,7151],{"class":1052,"line":1384},[1050,7152,1939],{"class":1067},[1050,7154,7155],{"class":1052,"line":1404},[1050,7156,7157],{"class":1056},"    # User context\n",[1050,7159,7160,7163,7165,7167,7169,7172,7174,7177,7179,7182,7184,7186,7188,7192,7194,7197,7199,7201,7203,7205,7207,7209],{"class":1052,"line":1409},[1050,7161,7162],{"class":1067},"    user ",[1050,7164,2096],{"class":1071},[1050,7166,6964],{"class":1067},[1050,7168,1072],{"class":1071},[1050,7170,7171],{"class":1979},"ForeignKey",[1050,7173,1952],{"class":1071},[1050,7175,7176],{"class":1979},"User",[1050,7178,1491],{"class":1071},[1050,7180,7181],{"class":2295}," on_delete",[1050,7183,2096],{"class":1071},[1050,7185,6935],{"class":1979},[1050,7187,1072],{"class":1071},[1050,7189,7191],{"class":7190},"sFGJz","SET_NULL",[1050,7193,1491],{"class":1071},[1050,7195,7196],{"class":2295}," null",[1050,7198,2096],{"class":1071},[1050,7200,6979],{"class":1135},[1050,7202,1491],{"class":1071},[1050,7204,7127],{"class":2295},[1050,7206,2096],{"class":1071},[1050,7208,6979],{"class":1135},[1050,7210,1991],{"class":1071},[1050,7212,7213,7216,7218,7220,7222,7225,7227,7230,7232,7234],{"class":1052,"line":1423},[1050,7214,7215],{"class":1067},"    user_agent ",[1050,7217,2096],{"class":1071},[1050,7219,6964],{"class":1067},[1050,7221,1072],{"class":1071},[1050,7223,7224],{"class":1979},"TextField",[1050,7226,1952],{"class":1071},[1050,7228,7229],{"class":2295},"blank",[1050,7231,2096],{"class":1071},[1050,7233,6979],{"class":1135},[1050,7235,1991],{"class":1071},[1050,7237,7238,7241,7243,7245,7247,7250,7252,7254,7256,7258,7260,7262,7264,7266],{"class":1052,"line":1443},[1050,7239,7240],{"class":1067},"    ip_address ",[1050,7242,2096],{"class":1071},[1050,7244,6964],{"class":1067},[1050,7246,1072],{"class":1071},[1050,7248,7249],{"class":1979},"GenericIPAddressField",[1050,7251,1952],{"class":1071},[1050,7253,7118],{"class":2295},[1050,7255,2096],{"class":1071},[1050,7257,6979],{"class":1135},[1050,7259,1491],{"class":1071},[1050,7261,7127],{"class":2295},[1050,7263,2096],{"class":1071},[1050,7265,6979],{"class":1135},[1050,7267,1991],{"class":1071},[1050,7269,7270],{"class":1052,"line":1464},[1050,7271,1939],{"class":1067},[1050,7273,7274],{"class":1052,"line":1497},[1050,7275,7276],{"class":1056},"    # Additional metadata\n",[1050,7278,7279,7282,7284,7286,7288,7291,7293,7296,7298,7301,7303,7305,7307,7309],{"class":1052,"line":1514},[1050,7280,7281],{"class":1067},"    metadata ",[1050,7283,2096],{"class":1071},[1050,7285,6964],{"class":1067},[1050,7287,1072],{"class":1071},[1050,7289,7290],{"class":1979},"JSONField",[1050,7292,1952],{"class":1071},[1050,7294,7295],{"class":2295},"default",[1050,7297,2096],{"class":1071},[1050,7299,7300],{"class":2475},"dict",[1050,7302,1491],{"class":1071},[1050,7304,7127],{"class":2295},[1050,7306,2096],{"class":1071},[1050,7308,6979],{"class":1135},[1050,7310,1991],{"class":1071},[1050,7312,7313],{"class":1052,"line":1533},[1050,7314,1939],{"class":1067},[1050,7316,7317,7320,7323],{"class":1052,"line":1538},[1050,7318,7319],{"class":1199},"    class",[1050,7321,7322],{"class":1915}," Meta",[1050,7324,1919],{"class":1071},[1050,7326,7327,7330,7332],{"class":1052,"line":1552},[1050,7328,7329],{"class":1067},"        indexes ",[1050,7331,2096],{"class":1071},[1050,7333,7334],{"class":1071}," [\n",[1050,7336,7337,7340,7342,7345,7347,7350,7353,7355,7357,7359,7361,7363,7365,7367],{"class":1052,"line":1571},[1050,7338,7339],{"class":1067},"            models",[1050,7341,1072],{"class":1071},[1050,7343,7344],{"class":1979},"Index",[1050,7346,1952],{"class":1071},[1050,7348,7349],{"class":2295},"fields",[1050,7351,7352],{"class":1071},"=[",[1050,7354,1110],{"class":1102},[1050,7356,5358],{"class":1106},[1050,7358,1110],{"class":1102},[1050,7360,1491],{"class":1071},[1050,7362,1183],{"class":1102},[1050,7364,3654],{"class":1106},[1050,7366,1110],{"class":1102},[1050,7368,7369],{"class":1071},"]),\n",[1050,7371,7372,7374,7376,7378,7380,7382,7384,7386,7388,7390],{"class":1052,"line":1591},[1050,7373,7339],{"class":1067},[1050,7375,1072],{"class":1071},[1050,7377,7344],{"class":1979},[1050,7379,1952],{"class":1071},[1050,7381,7349],{"class":2295},[1050,7383,7352],{"class":1071},[1050,7385,1110],{"class":1102},[1050,7387,3694],{"class":1106},[1050,7389,1110],{"class":1102},[1050,7391,7369],{"class":1071},[1050,7393,7394,7396,7398,7400,7402,7404,7406,7408,7410,7412],{"class":1052,"line":1618},[1050,7395,7339],{"class":1067},[1050,7397,1072],{"class":1071},[1050,7399,7344],{"class":1979},[1050,7401,1952],{"class":1071},[1050,7403,7349],{"class":2295},[1050,7405,7352],{"class":1071},[1050,7407,1110],{"class":1102},[1050,7409,3711],{"class":1106},[1050,7411,1110],{"class":1102},[1050,7413,7369],{"class":1071},[1050,7415,7416,7418,7420,7422,7424,7426,7428,7430,7432,7434],{"class":1052,"line":1634},[1050,7417,7339],{"class":1067},[1050,7419,1072],{"class":1071},[1050,7421,7344],{"class":1979},[1050,7423,1952],{"class":1071},[1050,7425,7349],{"class":2295},[1050,7427,7352],{"class":1071},[1050,7429,1110],{"class":1102},[1050,7431,3744],{"class":1106},[1050,7433,1110],{"class":1102},[1050,7435,7369],{"class":1071},[1050,7437,7438],{"class":1052,"line":1653},[1050,7439,7440],{"class":1071},"        ]\n",[1050,7442,7443],{"class":1052,"line":1658},[1050,7444,1083],{"emptyLinePlaceholder":1082},[1050,7446,7447,7449,7452,7454,7456,7458,7460],{"class":1052,"line":1663},[1050,7448,1368],{"class":1199},[1050,7450,7451],{"class":1915}," SlowQuery",[1050,7453,1952],{"class":1071},[1050,7455,6935],{"class":6123},[1050,7457,1072],{"class":1071},[1050,7459,6940],{"class":6123},[1050,7461,1959],{"class":1071},[1050,7463,7464,7466,7469],{"class":1052,"line":1677},[1050,7465,1926],{"class":1925},[1050,7467,7468],{"class":1929},"Store slow query information",[1050,7470,1933],{"class":1925},[1050,7472,7473],{"class":1052,"line":1691},[1050,7474,1939],{"class":1067},[1050,7476,7477,7479,7481,7483,7485,7487,7489,7491,7493,7495],{"class":1052,"line":1714},[1050,7478,6959],{"class":1067},[1050,7480,2096],{"class":1071},[1050,7482,6964],{"class":1067},[1050,7484,1072],{"class":1071},[1050,7486,6969],{"class":1979},[1050,7488,1952],{"class":1071},[1050,7490,6974],{"class":2295},[1050,7492,2096],{"class":1071},[1050,7494,6979],{"class":1135},[1050,7496,1991],{"class":1071},[1050,7498,7499,7502,7504,7506,7508,7510],{"class":1052,"line":1735},[1050,7500,7501],{"class":1067},"    sql ",[1050,7503,2096],{"class":1071},[1050,7505,6964],{"class":1067},[1050,7507,1072],{"class":1071},[1050,7509,7224],{"class":1979},[1050,7511,3335],{"class":1071},[1050,7513,7514,7517,7519,7521,7523,7525,7527],{"class":1052,"line":1751},[1050,7515,7516],{"class":1067},"    duration ",[1050,7518,2096],{"class":1071},[1050,7520,6964],{"class":1067},[1050,7522,1072],{"class":1071},[1050,7524,7069],{"class":1979},[1050,7526,4199],{"class":1071},[1050,7528,7074],{"class":1056},[1050,7530,7531],{"class":1052,"line":1756},[1050,7532,1939],{"class":1067},[1050,7534,7535],{"class":1052,"line":1770},[1050,7536,7537],{"class":1056},"    # Query context\n",[1050,7539,7540,7542,7544,7546,7548,7550,7552,7554,7556,7558,7560,7562,7564,7566],{"class":1052,"line":1791},[1050,7541,6986],{"class":1067},[1050,7543,2096],{"class":1071},[1050,7545,6964],{"class":1067},[1050,7547,1072],{"class":1071},[1050,7549,6995],{"class":1979},[1050,7551,1952],{"class":1071},[1050,7553,7000],{"class":2295},[1050,7555,2096],{"class":1071},[1050,7557,7005],{"class":1116},[1050,7559,1491],{"class":1071},[1050,7561,7127],{"class":2295},[1050,7563,2096],{"class":1071},[1050,7565,6979],{"class":1135},[1050,7567,1991],{"class":1071},[1050,7569,7570,7572,7574,7576,7578,7580,7582,7584,7586,7588,7590,7592,7594,7596,7598,7600,7602,7604,7606,7608,7610,7612],{"class":1052,"line":1811},[1050,7571,7162],{"class":1067},[1050,7573,2096],{"class":1071},[1050,7575,6964],{"class":1067},[1050,7577,1072],{"class":1071},[1050,7579,7171],{"class":1979},[1050,7581,1952],{"class":1071},[1050,7583,7176],{"class":1979},[1050,7585,1491],{"class":1071},[1050,7587,7181],{"class":2295},[1050,7589,2096],{"class":1071},[1050,7591,6935],{"class":1979},[1050,7593,1072],{"class":1071},[1050,7595,7191],{"class":7190},[1050,7597,1491],{"class":1071},[1050,7599,7196],{"class":2295},[1050,7601,2096],{"class":1071},[1050,7603,6979],{"class":1135},[1050,7605,1491],{"class":1071},[1050,7607,7127],{"class":2295},[1050,7609,2096],{"class":1071},[1050,7611,6979],{"class":1135},[1050,7613,1991],{"class":1071},[1050,7615,7616],{"class":1052,"line":1826},[1050,7617,1939],{"class":1067},[1050,7619,7620],{"class":1052,"line":1831},[1050,7621,7622],{"class":1056},"    # Query analysis\n",[1050,7624,7625,7628,7630,7632,7634,7636],{"class":1052,"line":1836},[1050,7626,7627],{"class":1067},"    query_pattern ",[1050,7629,2096],{"class":1071},[1050,7631,6964],{"class":1067},[1050,7633,1072],{"class":1071},[1050,7635,7224],{"class":1979},[1050,7637,3335],{"class":1071},[1050,7639,7640,7643,7645,7647,7649,7651,7653,7655,7657,7660],{"class":1052,"line":1842},[1050,7641,7642],{"class":1067},"    table_names ",[1050,7644,2096],{"class":1071},[1050,7646,6964],{"class":1067},[1050,7648,1072],{"class":1071},[1050,7650,7290],{"class":1979},[1050,7652,1952],{"class":1071},[1050,7654,7295],{"class":2295},[1050,7656,2096],{"class":1071},[1050,7658,7659],{"class":2475},"list",[1050,7661,1991],{"class":1071},[1050,7663,7664,7667,7669,7671,7673,7675,7677,7679,7681,7684,7686],{"class":1052,"line":1847},[1050,7665,7666],{"class":1067},"    operation_type ",[1050,7668,2096],{"class":1071},[1050,7670,6964],{"class":1067},[1050,7672,1072],{"class":1071},[1050,7674,6995],{"class":1979},[1050,7676,1952],{"class":1071},[1050,7678,7000],{"class":2295},[1050,7680,2096],{"class":1071},[1050,7682,7683],{"class":1116},"20",[1050,7685,2056],{"class":1071},[1050,7687,7688],{"class":1056},"  # SELECT, INSERT, UPDATE, DELETE\n",[1050,7690,7691],{"class":1052,"line":1853},[1050,7692,1939],{"class":1067},[1050,7694,7695],{"class":1052,"line":1861},[1050,7696,7697],{"class":1056},"    # Performance impact\n",[1050,7699,7700,7703,7705,7707,7709,7711,7713,7715,7717,7719,7721,7723,7725,7727],{"class":1052,"line":1869},[1050,7701,7702],{"class":1067},"    rows_examined ",[1050,7704,2096],{"class":1071},[1050,7706,6964],{"class":1067},[1050,7708,1072],{"class":1071},[1050,7710,7053],{"class":1979},[1050,7712,1952],{"class":1071},[1050,7714,7118],{"class":2295},[1050,7716,2096],{"class":1071},[1050,7718,6979],{"class":1135},[1050,7720,1491],{"class":1071},[1050,7722,7127],{"class":2295},[1050,7724,2096],{"class":1071},[1050,7726,6979],{"class":1135},[1050,7728,1991],{"class":1071},[1050,7730,7731,7734,7736,7738,7740,7742,7744,7746,7748,7750,7752,7754,7756,7758],{"class":1052,"line":1888},[1050,7732,7733],{"class":1067},"    rows_returned ",[1050,7735,2096],{"class":1071},[1050,7737,6964],{"class":1067},[1050,7739,1072],{"class":1071},[1050,7741,7053],{"class":1979},[1050,7743,1952],{"class":1071},[1050,7745,7118],{"class":2295},[1050,7747,2096],{"class":1071},[1050,7749,6979],{"class":1135},[1050,7751,1491],{"class":1071},[1050,7753,7127],{"class":2295},[1050,7755,2096],{"class":1071},[1050,7757,6979],{"class":1135},[1050,7759,1991],{"class":1071},[1050,7761,7762],{"class":1052,"line":1905},[1050,7763,1939],{"class":1067},[1050,7765,7766,7768,7770],{"class":1052,"line":1910},[1050,7767,7319],{"class":1199},[1050,7769,7322],{"class":1915},[1050,7771,1919],{"class":1071},[1050,7773,7774,7776,7778],{"class":1052,"line":1922},[1050,7775,7329],{"class":1067},[1050,7777,2096],{"class":1071},[1050,7779,7334],{"class":1071},[1050,7781,7782,7784,7786,7788,7790,7792,7794,7796,7798,7800,7802,7804,7806,7808],{"class":1052,"line":1936},[1050,7783,7339],{"class":1067},[1050,7785,1072],{"class":1071},[1050,7787,7344],{"class":1979},[1050,7789,1952],{"class":1071},[1050,7791,7349],{"class":2295},[1050,7793,7352],{"class":1071},[1050,7795,1110],{"class":1102},[1050,7797,5358],{"class":1106},[1050,7799,1110],{"class":1102},[1050,7801,1491],{"class":1071},[1050,7803,1183],{"class":1102},[1050,7805,2152],{"class":1106},[1050,7807,1110],{"class":1102},[1050,7809,7369],{"class":1071},[1050,7811,7812,7814,7816,7818,7820,7822,7824,7826,7829,7831],{"class":1052,"line":1942},[1050,7813,7339],{"class":1067},[1050,7815,1072],{"class":1071},[1050,7817,7344],{"class":1979},[1050,7819,1952],{"class":1071},[1050,7821,7349],{"class":2295},[1050,7823,7352],{"class":1071},[1050,7825,1110],{"class":1102},[1050,7827,7828],{"class":1106},"query_pattern",[1050,7830,1110],{"class":1102},[1050,7832,7369],{"class":1071},[1050,7834,7835,7837,7839,7841,7843,7845,7847,7849,7852,7854],{"class":1052,"line":1962},[1050,7836,7339],{"class":1067},[1050,7838,1072],{"class":1071},[1050,7840,7344],{"class":1979},[1050,7842,1952],{"class":1071},[1050,7844,7349],{"class":2295},[1050,7846,7352],{"class":1071},[1050,7848,1110],{"class":1102},[1050,7850,7851],{"class":1106},"operation_type",[1050,7853,1110],{"class":1102},[1050,7855,7369],{"class":1071},[1050,7857,7858],{"class":1052,"line":1994},[1050,7859,7440],{"class":1071},[1050,7861,7862],{"class":1052,"line":2022},[1050,7863,1083],{"emptyLinePlaceholder":1082},[1050,7865,7866,7868,7871],{"class":1052,"line":2062},[1050,7867,1368],{"class":1199},[1050,7869,7870],{"class":1915}," DatabaseMetrics",[1050,7872,1919],{"class":1071},[1050,7874,7875,7877,7880],{"class":1052,"line":2067},[1050,7876,1926],{"class":1925},[1050,7878,7879],{"class":1929},"Collect and analyze database performance metrics",[1050,7881,1933],{"class":1925},[1050,7883,7884],{"class":1052,"line":2104},[1050,7885,1939],{"class":1067},[1050,7887,7888,7891],{"class":1052,"line":2115},[1050,7889,7890],{"class":1071},"    @",[1050,7892,7893],{"class":2475},"staticmethod\n",[1050,7895,7896,7898,7901],{"class":1052,"line":2121},[1050,7897,1945],{"class":1199},[1050,7899,7900],{"class":2072}," collect_connection_metrics",[1050,7902,2827],{"class":1071},[1050,7904,7905,7907,7910],{"class":1052,"line":2131},[1050,7906,2107],{"class":1925},[1050,7908,7909],{"class":1929},"Collect database connection metrics",[1050,7911,1933],{"class":1925},[1050,7913,7914],{"class":1052,"line":2147},[1050,7915,2118],{"class":1067},[1050,7917,7918,7921,7923],{"class":1052,"line":2183},[1050,7919,7920],{"class":1067},"        metrics ",[1050,7922,2096],{"class":1071},[1050,7924,2415],{"class":1071},[1050,7926,7927],{"class":1052,"line":2199},[1050,7928,2118],{"class":1067},[1050,7930,7931],{"class":1052,"line":2205},[1050,7932,7933],{"class":1056},"        # PostgreSQL specific metrics\n",[1050,7935,7936,7938,7940,7942,7945,7947,7949,7952,7954],{"class":1052,"line":2210},[1050,7937,2213],{"class":1063},[1050,7939,2435],{"class":1067},[1050,7941,1072],{"class":1071},[1050,7943,7944],{"class":1075},"vendor",[1050,7946,6463],{"class":1479},[1050,7948,1183],{"class":1102},[1050,7950,7951],{"class":1106},"postgresql",[1050,7953,1110],{"class":1102},[1050,7955,1919],{"class":1071},[1050,7957,7958,7961,7963,7965,7968,7970,7973,7976],{"class":1052,"line":2231},[1050,7959,7960],{"class":1063},"            with",[1050,7962,2435],{"class":1067},[1050,7964,1072],{"class":1071},[1050,7966,7967],{"class":1979},"cursor",[1050,7969,4199],{"class":1071},[1050,7971,7972],{"class":1063}," as",[1050,7974,7975],{"class":1067}," cursor",[1050,7977,1919],{"class":1071},[1050,7979,7980],{"class":1052,"line":2249},[1050,7981,7982],{"class":1056},"                # Connection statistics\n",[1050,7984,7985,7988,7990,7993,7995],{"class":1052,"line":2292},[1050,7986,7987],{"class":1067},"                cursor",[1050,7989,1072],{"class":1071},[1050,7991,7992],{"class":1979},"execute",[1050,7994,1952],{"class":1071},[1050,7996,1933],{"class":1102},[1050,7998,7999],{"class":1052,"line":2304},[1050,8000,8001],{"class":1106},"                    SELECT \n",[1050,8003,8004],{"class":1052,"line":2310},[1050,8005,8006],{"class":1106},"                        numbackends as active_connections,\n",[1050,8008,8009],{"class":1052,"line":2315},[1050,8010,8011],{"class":1106},"                        xact_commit as transactions_committed,\n",[1050,8013,8014],{"class":1052,"line":2331},[1050,8015,8016],{"class":1106},"                        xact_rollback as transactions_rolled_back,\n",[1050,8018,8019],{"class":1052,"line":2357},[1050,8020,8021],{"class":1106},"                        blks_read as blocks_read,\n",[1050,8023,8024],{"class":1052,"line":2367},[1050,8025,8026],{"class":1106},"                        blks_hit as blocks_hit,\n",[1050,8028,8029],{"class":1052,"line":2373},[1050,8030,8031],{"class":1106},"                        tup_returned as tuples_returned,\n",[1050,8033,8034],{"class":1052,"line":2378},[1050,8035,8036],{"class":1106},"                        tup_fetched as tuples_fetched,\n",[1050,8038,8039],{"class":1052,"line":2392},[1050,8040,8041],{"class":1106},"                        tup_inserted as tuples_inserted,\n",[1050,8043,8044],{"class":1052,"line":2402},[1050,8045,8046],{"class":1106},"                        tup_updated as tuples_updated,\n",[1050,8048,8049],{"class":1052,"line":2407},[1050,8050,8051],{"class":1106},"                        tup_deleted as tuples_deleted\n",[1050,8053,8054],{"class":1052,"line":2418},[1050,8055,8056],{"class":1106},"                    FROM pg_stat_database \n",[1050,8058,8059],{"class":1052,"line":2423},[1050,8060,8061],{"class":1106},"                    WHERE datname = current_database()\n",[1050,8063,8064,8067],{"class":1052,"line":2445},[1050,8065,8066],{"class":1102},"                \"\"\"",[1050,8068,1991],{"class":1071},[1050,8070,8071],{"class":1052,"line":2467},[1050,8072,5623],{"class":1067},[1050,8074,8075,8078,8080,8082,8084,8087],{"class":1052,"line":2496},[1050,8076,8077],{"class":1067},"                row ",[1050,8079,2096],{"class":1071},[1050,8081,7975],{"class":1067},[1050,8083,1072],{"class":1071},[1050,8085,8086],{"class":1979},"fetchone",[1050,8088,3335],{"class":1071},[1050,8090,8091,8093,8096],{"class":1052,"line":2502},[1050,8092,5633],{"class":1063},[1050,8094,8095],{"class":1067}," row",[1050,8097,1919],{"class":1071},[1050,8099,8100,8103,8105,8107,8110,8112,8115,8117,8119,8122,8124,8126,8128,8131],{"class":1052,"line":2508},[1050,8101,8102],{"class":1067},"                    columns ",[1050,8104,2096],{"class":1071},[1050,8106,1702],{"class":1071},[1050,8108,8109],{"class":1067},"desc",[1050,8111,1274],{"class":1071},[1050,8113,8114],{"class":1116},"0",[1050,8116,2282],{"class":1071},[1050,8118,3595],{"class":1063},[1050,8120,8121],{"class":1067}," desc ",[1050,8123,2432],{"class":1063},[1050,8125,7975],{"class":1067},[1050,8127,1072],{"class":1071},[1050,8129,8130],{"class":1075},"description",[1050,8132,2464],{"class":1071},[1050,8134,8135,8138,8140,8143,8145,8147,8149,8152,8154,8157,8159,8161],{"class":1052,"line":2529},[1050,8136,8137],{"class":1067},"                    metrics",[1050,8139,1072],{"class":1071},[1050,8141,8142],{"class":1979},"update",[1050,8144,1952],{"class":1071},[1050,8146,7300],{"class":2475},[1050,8148,1952],{"class":1071},[1050,8150,8151],{"class":1948},"zip",[1050,8153,1952],{"class":1071},[1050,8155,8156],{"class":1979},"columns",[1050,8158,1491],{"class":1071},[1050,8160,8095],{"class":1979},[1050,8162,8163],{"class":1071},")))\n",[1050,8165,8166],{"class":1052,"line":2534},[1050,8167,5623],{"class":1067},[1050,8169,8170],{"class":1052,"line":2554},[1050,8171,8172],{"class":1056},"                # Lock statistics\n",[1050,8174,8175,8177,8179,8181,8183],{"class":1052,"line":2571},[1050,8176,7987],{"class":1067},[1050,8178,1072],{"class":1071},[1050,8180,7992],{"class":1979},[1050,8182,1952],{"class":1071},[1050,8184,1933],{"class":1102},[1050,8186,8187],{"class":1052,"line":2589},[1050,8188,8001],{"class":1106},[1050,8190,8191],{"class":1052,"line":2605},[1050,8192,8193],{"class":1106},"                        mode,\n",[1050,8195,8196],{"class":1052,"line":2621},[1050,8197,8198],{"class":1106},"                        COUNT(*) as lock_count\n",[1050,8200,8201],{"class":1052,"line":2647},[1050,8202,8203],{"class":1106},"                    FROM pg_locks \n",[1050,8205,8206],{"class":1052,"line":2653},[1050,8207,8208],{"class":1106},"                    WHERE database = (SELECT oid FROM pg_database WHERE datname = current_database())\n",[1050,8210,8211],{"class":1052,"line":2658},[1050,8212,8213],{"class":1106},"                    GROUP BY mode\n",[1050,8215,8216,8218],{"class":1052,"line":2674},[1050,8217,8066],{"class":1102},[1050,8219,1991],{"class":1071},[1050,8221,8222],{"class":1052,"line":2696},[1050,8223,5623],{"class":1067},[1050,8225,8226,8229,8231],{"class":1052,"line":2716},[1050,8227,8228],{"class":1067},"                lock_stats ",[1050,8230,2096],{"class":1071},[1050,8232,2415],{"class":1071},[1050,8234,8235,8238,8241,8243,8245,8247,8249,8251,8254],{"class":1052,"line":2756},[1050,8236,8237],{"class":1063},"                for",[1050,8239,8240],{"class":1067}," mode",[1050,8242,1491],{"class":1071},[1050,8244,4188],{"class":1067},[1050,8246,2432],{"class":1063},[1050,8248,7975],{"class":1067},[1050,8250,1072],{"class":1071},[1050,8252,8253],{"class":1979},"fetchall",[1050,8255,2827],{"class":1071},[1050,8257,8258,8261,8263,8265,8268,8270,8273,8275,8278,8280,8282,8284,8286,8288],{"class":1052,"line":2794},[1050,8259,8260],{"class":1067},"                    lock_stats",[1050,8262,1274],{"class":1071},[1050,8264,6711],{"class":1199},[1050,8266,8267],{"class":1106},"'locks_",[1050,8269,1234],{"class":1186},[1050,8271,8272],{"class":1067},"mode",[1050,8274,1072],{"class":1071},[1050,8276,8277],{"class":1979},"lower",[1050,8279,4199],{"class":1071},[1050,8281,1203],{"class":1186},[1050,8283,1110],{"class":1106},[1050,8285,2282],{"class":1071},[1050,8287,1093],{"class":1071},[1050,8289,8290],{"class":1067}," count\n",[1050,8292,8293],{"class":1052,"line":2799},[1050,8294,5623],{"class":1067},[1050,8296,8297,8300,8302,8304,8306,8309],{"class":1052,"line":2805},[1050,8298,8299],{"class":1067},"                metrics",[1050,8301,1072],{"class":1071},[1050,8303,8142],{"class":1979},[1050,8305,1952],{"class":1071},[1050,8307,8308],{"class":1979},"lock_stats",[1050,8310,1991],{"class":1071},[1050,8312,8313],{"class":1052,"line":2830},[1050,8314,2118],{"class":1067},[1050,8316,8317,8319],{"class":1052,"line":2876},[1050,8318,2956],{"class":1063},[1050,8320,8321],{"class":1067}," metrics\n",[1050,8323,8324],{"class":1052,"line":2897},[1050,8325,1939],{"class":1067},[1050,8327,8328,8330],{"class":1052,"line":2943},[1050,8329,7890],{"class":1071},[1050,8331,7893],{"class":2475},[1050,8333,8334,8336,8339],{"class":1052,"line":2948},[1050,8335,1945],{"class":1199},[1050,8337,8338],{"class":2072}," collect_table_metrics",[1050,8340,2827],{"class":1071},[1050,8342,8343,8345,8348],{"class":1052,"line":2953},[1050,8344,2107],{"class":1925},[1050,8346,8347],{"class":1929},"Collect table-level performance metrics",[1050,8349,1933],{"class":1925},[1050,8351,8352],{"class":1052,"line":2962},[1050,8353,2118],{"class":1067},[1050,8355,8356,8359,8361],{"class":1052,"line":2967},[1050,8357,8358],{"class":1067},"        table_metrics ",[1050,8360,2096],{"class":1071},[1050,8362,2415],{"class":1071},[1050,8364,8365],{"class":1052,"line":2986},[1050,8366,2118],{"class":1067},[1050,8368,8369,8371,8373,8375,8377,8379,8381,8383,8385],{"class":1052,"line":2996},[1050,8370,2213],{"class":1063},[1050,8372,2435],{"class":1067},[1050,8374,1072],{"class":1071},[1050,8376,7944],{"class":1075},[1050,8378,6463],{"class":1479},[1050,8380,1183],{"class":1102},[1050,8382,7951],{"class":1106},[1050,8384,1110],{"class":1102},[1050,8386,1919],{"class":1071},[1050,8388,8389,8391,8393,8395,8397,8399,8401,8403],{"class":1052,"line":3005},[1050,8390,7960],{"class":1063},[1050,8392,2435],{"class":1067},[1050,8394,1072],{"class":1071},[1050,8396,7967],{"class":1979},[1050,8398,4199],{"class":1071},[1050,8400,7972],{"class":1063},[1050,8402,7975],{"class":1067},[1050,8404,1919],{"class":1071},[1050,8406,8407,8409,8411,8413,8415],{"class":1052,"line":3010},[1050,8408,7987],{"class":1067},[1050,8410,1072],{"class":1071},[1050,8412,7992],{"class":1979},[1050,8414,1952],{"class":1071},[1050,8416,1933],{"class":1102},[1050,8418,8419],{"class":1052,"line":3016},[1050,8420,8001],{"class":1106},[1050,8422,8423],{"class":1052,"line":3076},[1050,8424,8425],{"class":1106},"                        schemaname,\n",[1050,8427,8428],{"class":1052,"line":3081},[1050,8429,8430],{"class":1106},"                        relname as table_name,\n",[1050,8432,8433],{"class":1052,"line":3087},[1050,8434,8435],{"class":1106},"                        seq_scan,\n",[1050,8437,8438],{"class":1052,"line":3133},[1050,8439,8440],{"class":1106},"                        seq_tup_read,\n",[1050,8442,8443],{"class":1052,"line":3138},[1050,8444,8445],{"class":1106},"                        idx_scan,\n",[1050,8447,8448],{"class":1052,"line":3144},[1050,8449,8450],{"class":1106},"                        idx_tup_fetch,\n",[1050,8452,8453],{"class":1052,"line":3200},[1050,8454,8455],{"class":1106},"                        n_tup_ins as inserts,\n",[1050,8457,8458],{"class":1052,"line":3205},[1050,8459,8460],{"class":1106},"                        n_tup_upd as updates,\n",[1050,8462,8463],{"class":1052,"line":3211},[1050,8464,8465],{"class":1106},"                        n_tup_del as deletes,\n",[1050,8467,8468],{"class":1052,"line":3239},[1050,8469,8470],{"class":1106},"                        n_live_tup as live_tuples,\n",[1050,8472,8473],{"class":1052,"line":3244},[1050,8474,8475],{"class":1106},"                        n_dead_tup as dead_tuples,\n",[1050,8477,8478],{"class":1052,"line":3252},[1050,8479,8480],{"class":1106},"                        last_vacuum,\n",[1050,8482,8483],{"class":1052,"line":3257},[1050,8484,8485],{"class":1106},"                        last_autovacuum,\n",[1050,8487,8488],{"class":1052,"line":3263},[1050,8489,8490],{"class":1106},"                        last_analyze,\n",[1050,8492,8493],{"class":1052,"line":3273},[1050,8494,8495],{"class":1106},"                        last_autoanalyze\n",[1050,8497,8498],{"class":1052,"line":3283},[1050,8499,8500],{"class":1106},"                    FROM pg_stat_user_tables\n",[1050,8502,8503],{"class":1052,"line":3288},[1050,8504,8505],{"class":1106},"                    ORDER BY seq_tup_read + idx_tup_fetch DESC\n",[1050,8507,8508,8510],{"class":1052,"line":3306},[1050,8509,8066],{"class":1102},[1050,8511,1991],{"class":1071},[1050,8513,8514],{"class":1052,"line":3321},[1050,8515,5623],{"class":1067},[1050,8517,8518,8521,8523,8525,8527,8529,8531,8533,8535,8537,8539,8541,8543,8545],{"class":1052,"line":3338},[1050,8519,8520],{"class":1067},"                columns ",[1050,8522,2096],{"class":1071},[1050,8524,1702],{"class":1071},[1050,8526,8109],{"class":1067},[1050,8528,1274],{"class":1071},[1050,8530,8114],{"class":1116},[1050,8532,2282],{"class":1071},[1050,8534,3595],{"class":1063},[1050,8536,8121],{"class":1067},[1050,8538,2432],{"class":1063},[1050,8540,7975],{"class":1067},[1050,8542,1072],{"class":1071},[1050,8544,8130],{"class":1075},[1050,8546,2464],{"class":1071},[1050,8548,8549,8551,8554,8556,8558,8560,8562],{"class":1052,"line":3343},[1050,8550,8237],{"class":1063},[1050,8552,8553],{"class":1067}," row ",[1050,8555,2432],{"class":1063},[1050,8557,7975],{"class":1067},[1050,8559,1072],{"class":1071},[1050,8561,8253],{"class":1979},[1050,8563,2827],{"class":1071},[1050,8565,8566,8569,8571,8574,8576,8578,8580,8582,8584,8586],{"class":1052,"line":3362},[1050,8567,8568],{"class":1067},"                    table_data ",[1050,8570,2096],{"class":1071},[1050,8572,8573],{"class":2475}," dict",[1050,8575,1952],{"class":1071},[1050,8577,8151],{"class":1948},[1050,8579,1952],{"class":1071},[1050,8581,8156],{"class":1979},[1050,8583,1491],{"class":1071},[1050,8585,8095],{"class":1979},[1050,8587,8588],{"class":1071},"))\n",[1050,8590,8591,8594,8596,8599,8601,8603,8606,8608],{"class":1052,"line":3368},[1050,8592,8593],{"class":1067},"                    table_name ",[1050,8595,2096],{"class":1071},[1050,8597,8598],{"class":1067}," table_data",[1050,8600,1274],{"class":1071},[1050,8602,1110],{"class":1102},[1050,8604,8605],{"class":1106},"table_name",[1050,8607,1110],{"class":1102},[1050,8609,2464],{"class":1071},[1050,8611,8612,8615,8617,8619,8621,8623],{"class":1052,"line":3386},[1050,8613,8614],{"class":1067},"                    table_metrics",[1050,8616,1274],{"class":1071},[1050,8618,8605],{"class":1067},[1050,8620,2282],{"class":1071},[1050,8622,1093],{"class":1071},[1050,8624,8625],{"class":1067}," table_data\n",[1050,8627,8628],{"class":1052,"line":3391},[1050,8629,2118],{"class":1067},[1050,8631,8632,8634],{"class":1052,"line":3408},[1050,8633,2956],{"class":1063},[1050,8635,8636],{"class":1067}," table_metrics\n",[1050,8638,8639],{"class":1052,"line":3429},[1050,8640,1939],{"class":1067},[1050,8642,8643,8645],{"class":1052,"line":3445},[1050,8644,7890],{"class":1071},[1050,8646,7893],{"class":2475},[1050,8648,8649,8651,8654],{"class":1052,"line":3450},[1050,8650,1945],{"class":1199},[1050,8652,8653],{"class":2072}," collect_index_metrics",[1050,8655,2827],{"class":1071},[1050,8657,8658,8660,8663],{"class":1052,"line":3456},[1050,8659,2107],{"class":1925},[1050,8661,8662],{"class":1929},"Collect index usage metrics",[1050,8664,1933],{"class":1925},[1050,8666,8667],{"class":1052,"line":3482},[1050,8668,2118],{"class":1067},[1050,8670,8671,8674,8676],{"class":1052,"line":3487},[1050,8672,8673],{"class":1067},"        index_metrics ",[1050,8675,2096],{"class":1071},[1050,8677,2415],{"class":1071},[1050,8679,8680],{"class":1052,"line":3495},[1050,8681,2118],{"class":1067},[1050,8683,8684,8686,8688,8690,8692,8694,8696,8698,8700],{"class":1052,"line":3500},[1050,8685,2213],{"class":1063},[1050,8687,2435],{"class":1067},[1050,8689,1072],{"class":1071},[1050,8691,7944],{"class":1075},[1050,8693,6463],{"class":1479},[1050,8695,1183],{"class":1102},[1050,8697,7951],{"class":1106},[1050,8699,1110],{"class":1102},[1050,8701,1919],{"class":1071},[1050,8703,8704,8706,8708,8710,8712,8714,8716,8718],{"class":1052,"line":3526},[1050,8705,7960],{"class":1063},[1050,8707,2435],{"class":1067},[1050,8709,1072],{"class":1071},[1050,8711,7967],{"class":1979},[1050,8713,4199],{"class":1071},[1050,8715,7972],{"class":1063},[1050,8717,7975],{"class":1067},[1050,8719,1919],{"class":1071},[1050,8721,8722,8724,8726,8728,8730],{"class":1052,"line":3536},[1050,8723,7987],{"class":1067},[1050,8725,1072],{"class":1071},[1050,8727,7992],{"class":1979},[1050,8729,1952],{"class":1071},[1050,8731,1933],{"class":1102},[1050,8733,8734],{"class":1052,"line":3541},[1050,8735,8001],{"class":1106},[1050,8737,8738],{"class":1052,"line":3563},[1050,8739,8425],{"class":1106},[1050,8741,8742],{"class":1052,"line":3611},[1050,8743,8430],{"class":1106},[1050,8745,8746],{"class":1052,"line":3628},[1050,8747,8748],{"class":1106},"                        indexrelname as index_name,\n",[1050,8750,8751],{"class":1052,"line":3633},[1050,8752,8753],{"class":1106},"                        idx_scan as scans,\n",[1050,8755,8756],{"class":1052,"line":3639},[1050,8757,8758],{"class":1106},"                        idx_tup_read as tuples_read,\n",[1050,8760,8761],{"class":1052,"line":3649},[1050,8762,8763],{"class":1106},"                        idx_tup_fetch as tuples_fetched,\n",[1050,8765,8766],{"class":1052,"line":3669},[1050,8767,8768],{"class":1106},"                        pg_size_pretty(pg_relation_size(indexrelid)) as size\n",[1050,8770,8771],{"class":1052,"line":3689},[1050,8772,8773],{"class":1106},"                    FROM pg_stat_user_indexes\n",[1050,8775,8776],{"class":1052,"line":3706},[1050,8777,8778],{"class":1106},"                    ORDER BY idx_scan DESC\n",[1050,8780,8781,8783],{"class":1052,"line":3739},[1050,8782,8066],{"class":1102},[1050,8784,1991],{"class":1071},[1050,8786,8787],{"class":1052,"line":3771},[1050,8788,5623],{"class":1067},[1050,8790,8791,8793,8795,8797,8799,8801,8803,8805,8807,8809,8811,8813,8815,8817],{"class":1052,"line":3814},[1050,8792,8520],{"class":1067},[1050,8794,2096],{"class":1071},[1050,8796,1702],{"class":1071},[1050,8798,8109],{"class":1067},[1050,8800,1274],{"class":1071},[1050,8802,8114],{"class":1116},[1050,8804,2282],{"class":1071},[1050,8806,3595],{"class":1063},[1050,8808,8121],{"class":1067},[1050,8810,2432],{"class":1063},[1050,8812,7975],{"class":1067},[1050,8814,1072],{"class":1071},[1050,8816,8130],{"class":1075},[1050,8818,2464],{"class":1071},[1050,8820,8821,8823,8825,8827,8829,8831,8833],{"class":1052,"line":3819},[1050,8822,8237],{"class":1063},[1050,8824,8553],{"class":1067},[1050,8826,2432],{"class":1063},[1050,8828,7975],{"class":1067},[1050,8830,1072],{"class":1071},[1050,8832,8253],{"class":1979},[1050,8834,2827],{"class":1071},[1050,8836,8837,8840,8842,8844,8846,8848,8850,8852,8854,8856],{"class":1052,"line":3824},[1050,8838,8839],{"class":1067},"                    index_data ",[1050,8841,2096],{"class":1071},[1050,8843,8573],{"class":2475},[1050,8845,1952],{"class":1071},[1050,8847,8151],{"class":1948},[1050,8849,1952],{"class":1071},[1050,8851,8156],{"class":1979},[1050,8853,1491],{"class":1071},[1050,8855,8095],{"class":1979},[1050,8857,8588],{"class":1071},[1050,8859,8860,8863,8865,8868,8870,8872,8875,8877],{"class":1052,"line":3830},[1050,8861,8862],{"class":1067},"                    index_name ",[1050,8864,2096],{"class":1071},[1050,8866,8867],{"class":1067}," index_data",[1050,8869,1274],{"class":1071},[1050,8871,1110],{"class":1102},[1050,8873,8874],{"class":1106},"index_name",[1050,8876,1110],{"class":1102},[1050,8878,2464],{"class":1071},[1050,8880,8881,8884,8886,8888,8890,8892],{"class":1052,"line":3847},[1050,8882,8883],{"class":1067},"                    index_metrics",[1050,8885,1274],{"class":1071},[1050,8887,8874],{"class":1067},[1050,8889,2282],{"class":1071},[1050,8891,1093],{"class":1071},[1050,8893,8894],{"class":1067}," index_data\n",[1050,8896,8897],{"class":1052,"line":3857},[1050,8898,2118],{"class":1067},[1050,8900,8901,8903],{"class":1052,"line":3879},[1050,8902,2956],{"class":1063},[1050,8904,8905],{"class":1067}," index_metrics\n",[1050,8907,8908],{"class":1052,"line":3884},[1050,8909,1939],{"class":1067},[1050,8911,8912,8914],{"class":1052,"line":3890},[1050,8913,7890],{"class":1071},[1050,8915,7893],{"class":2475},[1050,8917,8918,8920,8923],{"class":1052,"line":3926},[1050,8919,1945],{"class":1199},[1050,8921,8922],{"class":2072}," analyze_query_performance",[1050,8924,2827],{"class":1071},[1050,8926,8927,8929,8932],{"class":1052,"line":3952},[1050,8928,2107],{"class":1925},[1050,8930,8931],{"class":1929},"Analyze query performance patterns",[1050,8933,1933],{"class":1925},[1050,8935,8936],{"class":1052,"line":3974},[1050,8937,2118],{"class":1067},[1050,8939,8940,8943,8945],{"class":1052,"line":3984},[1050,8941,8942],{"class":1067},"        analysis ",[1050,8944,2096],{"class":1071},[1050,8946,1096],{"class":1071},[1050,8948,8949,8951,8953,8955,8957],{"class":1052,"line":3989},[1050,8950,1173],{"class":1102},[1050,8952,1761],{"class":1106},[1050,8954,1110],{"class":1102},[1050,8956,1113],{"class":1071},[1050,8958,8959],{"class":1071}," [],\n",[1050,8961,8962,8964,8967,8969,8971],{"class":1052,"line":3994},[1050,8963,1173],{"class":1102},[1050,8965,8966],{"class":1106},"frequent_patterns",[1050,8968,1110],{"class":1102},[1050,8970,1113],{"class":1071},[1050,8972,8973],{"class":1071}," {},\n",[1050,8975,8976,8978,8981,8983,8985],{"class":1052,"line":4000},[1050,8977,1173],{"class":1102},[1050,8979,8980],{"class":1106},"table_access_patterns",[1050,8982,1110],{"class":1102},[1050,8984,1113],{"class":1071},[1050,8986,8973],{"class":1071},[1050,8988,8989,8991,8994,8996,8998],{"class":1052,"line":4017},[1050,8990,1173],{"class":1102},[1050,8992,8993],{"class":1106},"recommendations",[1050,8995,1110],{"class":1102},[1050,8997,1113],{"class":1071},[1050,8999,9000],{"class":1071}," []\n",[1050,9002,9003],{"class":1052,"line":4022},[1050,9004,2202],{"class":1071},[1050,9006,9007],{"class":1052,"line":4036},[1050,9008,2118],{"class":1067},[1050,9010,9011],{"class":1052,"line":4046},[1050,9012,9013],{"class":1056},"        # Analyze slow queries from the last hour\n",[1050,9015,9016,9018,9021,9023],{"class":1052,"line":4051},[1050,9017,4270],{"class":1063},[1050,9019,9020],{"class":1067}," datetime ",[1050,9022,1064],{"class":1063},[1050,9024,9025],{"class":1067}," timedelta\n",[1050,9027,9028,9030,9032,9034,9037,9039],{"class":1052,"line":4060},[1050,9029,4270],{"class":1063},[1050,9031,1875],{"class":1067},[1050,9033,1072],{"class":1071},[1050,9035,9036],{"class":1067},"utils ",[1050,9038,1064],{"class":1063},[1050,9040,9041],{"class":1067}," timezone\n",[1050,9043,9044],{"class":1052,"line":4065},[1050,9045,2118],{"class":1067},[1050,9047,9048,9051,9053,9055,9057,9059,9061,9064],{"class":1052,"line":4082},[1050,9049,9050],{"class":1067},"        recent_slow_queries ",[1050,9052,2096],{"class":1071},[1050,9054,7451],{"class":1067},[1050,9056,1072],{"class":1071},[1050,9058,4405],{"class":1075},[1050,9060,1072],{"class":1071},[1050,9062,9063],{"class":1979},"filter",[1050,9065,2246],{"class":1071},[1050,9067,9068,9071,9073,9076,9078,9081,9083,9086,9089,9091,9094,9096,9098],{"class":1052,"line":4113},[1050,9069,9070],{"class":2295},"            timestamp__gte",[1050,9072,2096],{"class":1071},[1050,9074,9075],{"class":1979},"timezone",[1050,9077,1072],{"class":1071},[1050,9079,9080],{"class":1979},"now",[1050,9082,4199],{"class":1071},[1050,9084,9085],{"class":1479}," -",[1050,9087,9088],{"class":1979}," timedelta",[1050,9090,1952],{"class":1071},[1050,9092,9093],{"class":2295},"hours",[1050,9095,2096],{"class":1071},[1050,9097,6443],{"class":1116},[1050,9099,1991],{"class":1071},[1050,9101,9102,9105,9108,9110,9112,9115,9117,9120,9122],{"class":1052,"line":4149},[1050,9103,9104],{"class":1071},"        ).",[1050,9106,9107],{"class":1979},"order_by",[1050,9109,1952],{"class":1071},[1050,9111,1110],{"class":1102},[1050,9113,9114],{"class":1106},"-duration",[1050,9116,1110],{"class":1102},[1050,9118,9119],{"class":1071},")[:",[1050,9121,7683],{"class":1116},[1050,9123,2464],{"class":1071},[1050,9125,9126],{"class":1052,"line":4154},[1050,9127,2118],{"class":1067},[1050,9129,9130,9132,9135,9137,9140],{"class":1052,"line":4160},[1050,9131,2426],{"class":1063},[1050,9133,9134],{"class":1067}," slow_query ",[1050,9136,2432],{"class":1063},[1050,9138,9139],{"class":1067}," recent_slow_queries",[1050,9141,1919],{"class":1071},[1050,9143,9144,9147,9149,9151,9153,9155,9158,9161],{"class":1052,"line":4167},[1050,9145,9146],{"class":1067},"            analysis",[1050,9148,1274],{"class":1071},[1050,9150,1110],{"class":1102},[1050,9152,1761],{"class":1106},[1050,9154,1110],{"class":1102},[1050,9156,9157],{"class":1071},"].",[1050,9159,9160],{"class":1979},"append",[1050,9162,9163],{"class":1071},"({\n",[1050,9165,9166,9169,9171,9173,9175,9178,9180,9182,9184,9186,9188,9190,9192,9194,9196],{"class":1052,"line":4178},[1050,9167,9168],{"class":1102},"                '",[1050,9170,2136],{"class":1106},[1050,9172,1110],{"class":1102},[1050,9174,1113],{"class":1071},[1050,9176,9177],{"class":1979}," slow_query",[1050,9179,1072],{"class":1071},[1050,9181,2136],{"class":1075},[1050,9183,2276],{"class":1071},[1050,9185,5287],{"class":1116},[1050,9187,2282],{"class":1071},[1050,9189,4144],{"class":1479},[1050,9191,1183],{"class":1102},[1050,9193,5296],{"class":1106},[1050,9195,1110],{"class":1102},[1050,9197,1120],{"class":1071},[1050,9199,9200,9202,9204,9206,9208,9210,9212,9214],{"class":1052,"line":4205},[1050,9201,9168],{"class":1102},[1050,9203,2152],{"class":1106},[1050,9205,1110],{"class":1102},[1050,9207,1113],{"class":1071},[1050,9209,9177],{"class":1979},[1050,9211,1072],{"class":1071},[1050,9213,2152],{"class":1075},[1050,9215,1120],{"class":1071},[1050,9217,9218,9220,9222,9224,9226,9228,9230,9232],{"class":1052,"line":4217},[1050,9219,9168],{"class":1102},[1050,9221,2562],{"class":1106},[1050,9223,1110],{"class":1102},[1050,9225,1113],{"class":1071},[1050,9227,9177],{"class":1979},[1050,9229,1072],{"class":1071},[1050,9231,7828],{"class":1075},[1050,9233,1120],{"class":1071},[1050,9235,9236,9238,9240,9242,9244,9246,9248,9250],{"class":1052,"line":4222},[1050,9237,9168],{"class":1102},[1050,9239,5358],{"class":1106},[1050,9241,1110],{"class":1102},[1050,9243,1113],{"class":1071},[1050,9245,9177],{"class":1979},[1050,9247,1072],{"class":1071},[1050,9249,5358],{"class":1075},[1050,9251,1120],{"class":1071},[1050,9253,9254],{"class":1052,"line":4227},[1050,9255,9256],{"class":1071},"            })\n",[1050,9258,9259],{"class":1052,"line":4246},[1050,9260,2118],{"class":1067},[1050,9262,9263],{"class":1052,"line":4256},[1050,9264,9265],{"class":1056},"        # Analyze query patterns\n",[1050,9267,9268,9271,9273,9275,9277,9279,9281,9283],{"class":1052,"line":4261},[1050,9269,9270],{"class":1067},"        pattern_stats ",[1050,9272,2096],{"class":1071},[1050,9274,7451],{"class":1067},[1050,9276,1072],{"class":1071},[1050,9278,4405],{"class":1075},[1050,9280,1072],{"class":1071},[1050,9282,9063],{"class":1979},[1050,9284,2246],{"class":1071},[1050,9286,9287,9289,9291,9293,9295,9297,9299,9301,9303,9305,9307,9309,9312],{"class":1052,"line":4267},[1050,9288,9070],{"class":2295},[1050,9290,2096],{"class":1071},[1050,9292,9075],{"class":1979},[1050,9294,1072],{"class":1071},[1050,9296,9080],{"class":1979},[1050,9298,4199],{"class":1071},[1050,9300,9085],{"class":1479},[1050,9302,9088],{"class":1979},[1050,9304,1952],{"class":1071},[1050,9306,9093],{"class":2295},[1050,9308,2096],{"class":1071},[1050,9310,9311],{"class":1116},"24",[1050,9313,1991],{"class":1071},[1050,9315,9316,9318,9321,9323,9325,9327,9329,9331,9334],{"class":1052,"line":4290},[1050,9317,9104],{"class":1071},[1050,9319,9320],{"class":1979},"values",[1050,9322,1952],{"class":1071},[1050,9324,1110],{"class":1102},[1050,9326,7828],{"class":1106},[1050,9328,1110],{"class":1102},[1050,9330,3945],{"class":1071},[1050,9332,9333],{"class":1979},"annotate",[1050,9335,2246],{"class":1071},[1050,9337,9338,9341,9343,9345,9347,9350,9352,9354,9357,9359],{"class":1052,"line":4295},[1050,9339,9340],{"class":2295},"            count",[1050,9342,2096],{"class":1071},[1050,9344,6935],{"class":1979},[1050,9346,1072],{"class":1071},[1050,9348,9349],{"class":1979},"Count",[1050,9351,1952],{"class":1071},[1050,9353,1110],{"class":1102},[1050,9355,9356],{"class":1106},"id",[1050,9358,1110],{"class":1102},[1050,9360,2644],{"class":1071},[1050,9362,9363,9366,9368,9370,9372,9375,9377,9379,9381,9383],{"class":1052,"line":4329},[1050,9364,9365],{"class":2295},"            avg_duration",[1050,9367,2096],{"class":1071},[1050,9369,6935],{"class":1979},[1050,9371,1072],{"class":1071},[1050,9373,9374],{"class":1979},"Avg",[1050,9376,1952],{"class":1071},[1050,9378,1110],{"class":1102},[1050,9380,2152],{"class":1106},[1050,9382,1110],{"class":1102},[1050,9384,2644],{"class":1071},[1050,9386,9387,9390,9392,9394,9396,9399,9401,9403,9405,9407],{"class":1052,"line":4361},[1050,9388,9389],{"class":2295},"            max_duration",[1050,9391,2096],{"class":1071},[1050,9393,6935],{"class":1979},[1050,9395,1072],{"class":1071},[1050,9397,9398],{"class":1979},"Max",[1050,9400,1952],{"class":1071},[1050,9402,1110],{"class":1102},[1050,9404,2152],{"class":1106},[1050,9406,1110],{"class":1102},[1050,9408,1991],{"class":1071},[1050,9410,9411,9413,9415,9417,9419,9422,9424,9426,9428],{"class":1052,"line":4366},[1050,9412,9104],{"class":1071},[1050,9414,9107],{"class":1979},[1050,9416,1952],{"class":1071},[1050,9418,1110],{"class":1102},[1050,9420,9421],{"class":1106},"-count",[1050,9423,1110],{"class":1102},[1050,9425,9119],{"class":1071},[1050,9427,1610],{"class":1116},[1050,9429,2464],{"class":1071},[1050,9431,9432],{"class":1052,"line":4372},[1050,9433,2118],{"class":1067},[1050,9435,9436,9438,9441,9443,9446],{"class":1052,"line":4380},[1050,9437,2426],{"class":1063},[1050,9439,9440],{"class":1067}," pattern_stat ",[1050,9442,2432],{"class":1063},[1050,9444,9445],{"class":1067}," pattern_stats",[1050,9447,1919],{"class":1071},[1050,9449,9450,9452,9454,9456,9458,9460,9462,9465,9467,9469,9471,9473,9476,9478],{"class":1052,"line":4397},[1050,9451,9146],{"class":1067},[1050,9453,1274],{"class":1071},[1050,9455,1110],{"class":1102},[1050,9457,8966],{"class":1106},[1050,9459,1110],{"class":1102},[1050,9461,5606],{"class":1071},[1050,9463,9464],{"class":1067},"pattern_stat",[1050,9466,1274],{"class":1071},[1050,9468,1110],{"class":1102},[1050,9470,7828],{"class":1106},[1050,9472,1110],{"class":1102},[1050,9474,9475],{"class":1071},"]]",[1050,9477,1093],{"class":1071},[1050,9479,1096],{"class":1071},[1050,9481,9482,9484,9486,9488,9490,9493,9495,9497,9499,9501],{"class":1052,"line":4423},[1050,9483,9168],{"class":1102},[1050,9485,2577],{"class":1106},[1050,9487,1110],{"class":1102},[1050,9489,1113],{"class":1071},[1050,9491,9492],{"class":1067}," pattern_stat",[1050,9494,1274],{"class":1071},[1050,9496,1110],{"class":1102},[1050,9498,2577],{"class":1106},[1050,9500,1110],{"class":1102},[1050,9502,1711],{"class":1071},[1050,9504,9505,9507,9510,9512,9514,9516,9518,9520,9522,9524],{"class":1052,"line":4434},[1050,9506,9168],{"class":1102},[1050,9508,9509],{"class":1106},"avg_duration",[1050,9511,1110],{"class":1102},[1050,9513,1113],{"class":1071},[1050,9515,9492],{"class":1067},[1050,9517,1274],{"class":1071},[1050,9519,1110],{"class":1102},[1050,9521,9509],{"class":1106},[1050,9523,1110],{"class":1102},[1050,9525,1711],{"class":1071},[1050,9527,9529,9531,9534,9536,9538,9540,9542,9544,9546,9548],{"class":1052,"line":9528},222,[1050,9530,9168],{"class":1102},[1050,9532,9533],{"class":1106},"max_duration",[1050,9535,1110],{"class":1102},[1050,9537,1113],{"class":1071},[1050,9539,9492],{"class":1067},[1050,9541,1274],{"class":1071},[1050,9543,1110],{"class":1102},[1050,9545,9533],{"class":1106},[1050,9547,1110],{"class":1102},[1050,9549,1711],{"class":1071},[1050,9551,9553],{"class":1052,"line":9552},223,[1050,9554,9555],{"class":1071},"            }\n",[1050,9557,9559],{"class":1052,"line":9558},224,[1050,9560,2118],{"class":1067},[1050,9562,9564],{"class":1052,"line":9563},225,[1050,9565,9566],{"class":1056},"        # Generate recommendations\n",[1050,9568,9570,9573,9575,9577,9579,9581,9583,9585,9587,9589,9592,9594,9597],{"class":1052,"line":9569},226,[1050,9571,9572],{"class":1067},"        analysis",[1050,9574,1274],{"class":1071},[1050,9576,1110],{"class":1102},[1050,9578,8993],{"class":1106},[1050,9580,1110],{"class":1102},[1050,9582,2282],{"class":1071},[1050,9584,1093],{"class":1071},[1050,9586,7870],{"class":1067},[1050,9588,1072],{"class":1071},[1050,9590,9591],{"class":1979},"generate_recommendations",[1050,9593,1952],{"class":1071},[1050,9595,9596],{"class":1979},"analysis",[1050,9598,1991],{"class":1071},[1050,9600,9602],{"class":1052,"line":9601},227,[1050,9603,2118],{"class":1067},[1050,9605,9607,9609],{"class":1052,"line":9606},228,[1050,9608,2956],{"class":1063},[1050,9610,9611],{"class":1067}," analysis\n",[1050,9613,9615],{"class":1052,"line":9614},229,[1050,9616,1939],{"class":1067},[1050,9618,9620,9622],{"class":1052,"line":9619},230,[1050,9621,7890],{"class":1071},[1050,9623,7893],{"class":2475},[1050,9625,9627,9629,9632,9634,9636],{"class":1052,"line":9626},231,[1050,9628,1945],{"class":1199},[1050,9630,9631],{"class":2072}," generate_recommendations",[1050,9633,1952],{"class":1071},[1050,9635,9596],{"class":2082},[1050,9637,1959],{"class":1071},[1050,9639,9641,9643,9646],{"class":1052,"line":9640},232,[1050,9642,2107],{"class":1925},[1050,9644,9645],{"class":1929},"Generate performance recommendations",[1050,9647,1933],{"class":1925},[1050,9649,9651],{"class":1052,"line":9650},233,[1050,9652,2118],{"class":1067},[1050,9654,9656,9659,9661],{"class":1052,"line":9655},234,[1050,9657,9658],{"class":1067},"        recommendations ",[1050,9660,2096],{"class":1071},[1050,9662,9000],{"class":1071},[1050,9664,9666],{"class":1052,"line":9665},235,[1050,9667,2118],{"class":1067},[1050,9669,9671],{"class":1052,"line":9670},236,[1050,9672,9673],{"class":1056},"        # Check for frequent slow queries\n",[1050,9675,9677,9679,9681,9683,9685,9687,9690,9692,9694,9696,9698,9700,9702],{"class":1052,"line":9676},237,[1050,9678,2426],{"class":1063},[1050,9680,2810],{"class":1067},[1050,9682,1491],{"class":1071},[1050,9684,2815],{"class":1067},[1050,9686,2432],{"class":1063},[1050,9688,9689],{"class":1067}," analysis",[1050,9691,1274],{"class":1071},[1050,9693,1110],{"class":1102},[1050,9695,8966],{"class":1106},[1050,9697,1110],{"class":1102},[1050,9699,9157],{"class":1071},[1050,9701,2824],{"class":1979},[1050,9703,2827],{"class":1071},[1050,9705,9707,9709,9711,9713,9715,9717,9719,9721,9723,9725,9727,9729,9731,9733,9735,9737,9739,9741,9743],{"class":1052,"line":9706},238,[1050,9708,2537],{"class":1063},[1050,9710,2848],{"class":1067},[1050,9712,1274],{"class":1071},[1050,9714,1110],{"class":1102},[1050,9716,2577],{"class":1106},[1050,9718,1110],{"class":1102},[1050,9720,2282],{"class":1071},[1050,9722,2913],{"class":1479},[1050,9724,2916],{"class":1116},[1050,9726,2919],{"class":1479},[1050,9728,2848],{"class":1067},[1050,9730,1274],{"class":1071},[1050,9732,1110],{"class":1102},[1050,9734,9509],{"class":1106},[1050,9736,1110],{"class":1102},[1050,9738,2282],{"class":1071},[1050,9740,2913],{"class":1479},[1050,9742,2053],{"class":1116},[1050,9744,1919],{"class":1071},[1050,9746,9748,9751,9753,9755],{"class":1052,"line":9747},239,[1050,9749,9750],{"class":1067},"                recommendations",[1050,9752,1072],{"class":1071},[1050,9754,9160],{"class":1979},[1050,9756,9163],{"class":1071},[1050,9758,9760,9762,9765,9767,9769,9771,9774,9776],{"class":1052,"line":9759},240,[1050,9761,2574],{"class":1102},[1050,9763,9764],{"class":1106},"type",[1050,9766,1110],{"class":1102},[1050,9768,1113],{"class":1071},[1050,9770,1183],{"class":1102},[1050,9772,9773],{"class":1106},"slow_query_pattern",[1050,9775,1110],{"class":1102},[1050,9777,1120],{"class":1071},[1050,9779,9781,9783,9786,9788,9790,9792,9795,9797],{"class":1052,"line":9780},241,[1050,9782,2574],{"class":1102},[1050,9784,9785],{"class":1106},"severity",[1050,9787,1110],{"class":1102},[1050,9789,1113],{"class":1071},[1050,9791,1183],{"class":1102},[1050,9793,9794],{"class":1106},"high",[1050,9796,1110],{"class":1102},[1050,9798,1120],{"class":1071},[1050,9800,9802,9804,9807,9809,9811,9813,9816,9818,9820,9822,9824,9826,9828,9830,9832,9835,9837,9839,9841,9843,9845,9847,9849,9852,9854,9856],{"class":1052,"line":9801},242,[1050,9803,2574],{"class":1102},[1050,9805,9806],{"class":1106},"message",[1050,9808,1110],{"class":1102},[1050,9810,1113],{"class":1071},[1050,9812,2159],{"class":1199},[1050,9814,9815],{"class":1106},"\"Query pattern executed ",[1050,9817,1234],{"class":1186},[1050,9819,2738],{"class":1979},[1050,9821,1274],{"class":1071},[1050,9823,1110],{"class":1102},[1050,9825,2577],{"class":1106},[1050,9827,1110],{"class":1102},[1050,9829,2282],{"class":1071},[1050,9831,1203],{"class":1186},[1050,9833,9834],{"class":1106}," times with average duration ",[1050,9836,1234],{"class":1186},[1050,9838,2738],{"class":1979},[1050,9840,1274],{"class":1071},[1050,9842,1110],{"class":1102},[1050,9844,9509],{"class":1106},[1050,9846,1110],{"class":1102},[1050,9848,2282],{"class":1071},[1050,9850,9851],{"class":1199},":.3f",[1050,9853,1203],{"class":1186},[1050,9855,6859],{"class":1106},[1050,9857,1120],{"class":1071},[1050,9859,9861,9863,9865,9867,9869,9871],{"class":1052,"line":9860},243,[1050,9862,2574],{"class":1102},[1050,9864,2562],{"class":1106},[1050,9866,1110],{"class":1102},[1050,9868,1113],{"class":1071},[1050,9870,2810],{"class":1979},[1050,9872,1120],{"class":1071},[1050,9874,9876,9878,9881,9883,9885,9887,9890],{"class":1052,"line":9875},244,[1050,9877,2574],{"class":1102},[1050,9879,9880],{"class":1106},"suggestion",[1050,9882,1110],{"class":1102},[1050,9884,1113],{"class":1071},[1050,9886,1183],{"class":1102},[1050,9888,9889],{"class":1106},"Consider adding indexes or optimizing the query",[1050,9891,6154],{"class":1102},[1050,9893,9895],{"class":1052,"line":9894},245,[1050,9896,9897],{"class":1071},"                })\n",[1050,9899,9901],{"class":1052,"line":9900},246,[1050,9902,2118],{"class":1067},[1050,9904,9906],{"class":1052,"line":9905},247,[1050,9907,9908],{"class":1056},"        # Check for N+1 query patterns\n",[1050,9910,9912,9915,9917,9919,9922,9925,9928,9930,9932,9934,9936,9938,9940,9942,9945,9947,9949,9951,9953,9955,9957,9960,9962,9964],{"class":1052,"line":9911},248,[1050,9913,9914],{"class":1067},"        select_patterns ",[1050,9916,2096],{"class":1071},[1050,9918,1702],{"class":1071},[1050,9920,9921],{"class":1067},"p ",[1050,9923,9924],{"class":1063},"for",[1050,9926,9927],{"class":1067}," p ",[1050,9929,2432],{"class":1063},[1050,9931,9689],{"class":1067},[1050,9933,1274],{"class":1071},[1050,9935,1110],{"class":1102},[1050,9937,8966],{"class":1106},[1050,9939,1110],{"class":1102},[1050,9941,9157],{"class":1071},[1050,9943,9944],{"class":1979},"keys",[1050,9946,4199],{"class":1071},[1050,9948,5301],{"class":1063},[1050,9950,1183],{"class":1102},[1050,9952,5520],{"class":1106},[1050,9954,1110],{"class":1102},[1050,9956,2546],{"class":1479},[1050,9958,9959],{"class":1067}," p",[1050,9961,1072],{"class":1071},[1050,9963,5531],{"class":1979},[1050,9965,9966],{"class":1071},"()]\n",[1050,9968,9970,9972,9974,9976,9979],{"class":1052,"line":9969},249,[1050,9971,2426],{"class":1063},[1050,9973,2540],{"class":1067},[1050,9975,2432],{"class":1063},[1050,9977,9978],{"class":1067}," select_patterns",[1050,9980,1919],{"class":1071},[1050,9982,9984,9986,9988,9990,9992,9994,9996,9998,10000,10002],{"class":1052,"line":9983},250,[1050,9985,2661],{"class":1067},[1050,9987,2096],{"class":1071},[1050,9989,9689],{"class":1067},[1050,9991,1274],{"class":1071},[1050,9993,1110],{"class":1102},[1050,9995,8966],{"class":1106},[1050,9997,1110],{"class":1102},[1050,9999,5606],{"class":1071},[1050,10001,2562],{"class":1067},[1050,10003,2464],{"class":1071},[1050,10005,10007,10009,10011,10013,10015,10017,10019,10021,10023,10025],{"class":1052,"line":10006},251,[1050,10008,2537],{"class":1063},[1050,10010,2848],{"class":1067},[1050,10012,1274],{"class":1071},[1050,10014,1110],{"class":1102},[1050,10016,2577],{"class":1106},[1050,10018,1110],{"class":1102},[1050,10020,2282],{"class":1071},[1050,10022,2913],{"class":1479},[1050,10024,3900],{"class":1116},[1050,10026,1919],{"class":1071},[1050,10028,10030,10032,10034,10036],{"class":1052,"line":10029},252,[1050,10031,9750],{"class":1067},[1050,10033,1072],{"class":1071},[1050,10035,9160],{"class":1979},[1050,10037,9163],{"class":1071},[1050,10039,10041,10043,10045,10047,10049,10051,10054,10056],{"class":1052,"line":10040},253,[1050,10042,2574],{"class":1102},[1050,10044,9764],{"class":1106},[1050,10046,1110],{"class":1102},[1050,10048,1113],{"class":1071},[1050,10050,1183],{"class":1102},[1050,10052,10053],{"class":1106},"n_plus_one",[1050,10055,1110],{"class":1102},[1050,10057,1120],{"class":1071},[1050,10059,10061,10063,10065,10067,10069,10071,10074,10076],{"class":1052,"line":10060},254,[1050,10062,2574],{"class":1102},[1050,10064,9785],{"class":1106},[1050,10066,1110],{"class":1102},[1050,10068,1113],{"class":1071},[1050,10070,1183],{"class":1102},[1050,10072,10073],{"class":1106},"medium",[1050,10075,1110],{"class":1102},[1050,10077,1120],{"class":1071},[1050,10079,10081,10083,10085,10087,10089,10091,10094,10096,10098,10100,10102,10104,10106,10108,10110,10113],{"class":1052,"line":10080},255,[1050,10082,2574],{"class":1102},[1050,10084,9806],{"class":1106},[1050,10086,1110],{"class":1102},[1050,10088,1113],{"class":1071},[1050,10090,2159],{"class":1199},[1050,10092,10093],{"class":1106},"\"Potential N+1 query pattern detected (",[1050,10095,1234],{"class":1186},[1050,10097,2738],{"class":1979},[1050,10099,1274],{"class":1071},[1050,10101,1110],{"class":1102},[1050,10103,2577],{"class":1106},[1050,10105,1110],{"class":1102},[1050,10107,2282],{"class":1071},[1050,10109,1203],{"class":1186},[1050,10111,10112],{"class":1106}," executions)\"",[1050,10114,1120],{"class":1071},[1050,10116,10118,10120,10122,10124,10126,10128],{"class":1052,"line":10117},256,[1050,10119,2574],{"class":1102},[1050,10121,2562],{"class":1106},[1050,10123,1110],{"class":1102},[1050,10125,1113],{"class":1071},[1050,10127,2810],{"class":1979},[1050,10129,1120],{"class":1071},[1050,10131,10133,10135,10137,10139,10141,10143,10146],{"class":1052,"line":10132},257,[1050,10134,2574],{"class":1102},[1050,10136,9880],{"class":1106},[1050,10138,1110],{"class":1102},[1050,10140,1113],{"class":1071},[1050,10142,1183],{"class":1102},[1050,10144,10145],{"class":1106},"Use select_related() or prefetch_related() to optimize",[1050,10147,6154],{"class":1102},[1050,10149,10151],{"class":1052,"line":10150},258,[1050,10152,9897],{"class":1071},[1050,10154,10156],{"class":1052,"line":10155},259,[1050,10157,2118],{"class":1067},[1050,10159,10161,10163],{"class":1052,"line":10160},260,[1050,10162,2956],{"class":1063},[1050,10164,10165],{"class":1067}," recommendations\n",[1050,10167,10169],{"class":1052,"line":10168},261,[1050,10170,1083],{"emptyLinePlaceholder":1082},[1050,10172,10174],{"class":1052,"line":10173},262,[1050,10175,10176],{"class":1056},"# Automated performance monitoring\n",[1050,10178,10180,10182,10185],{"class":1052,"line":10179},263,[1050,10181,1368],{"class":1199},[1050,10183,10184],{"class":1915}," PerformanceMonitor",[1050,10186,1919],{"class":1071},[1050,10188,10190,10192,10195],{"class":1052,"line":10189},264,[1050,10191,1926],{"class":1925},[1050,10193,10194],{"class":1929},"Automated performance monitoring and alerting",[1050,10196,1933],{"class":1925},[1050,10198,10200],{"class":1052,"line":10199},265,[1050,10201,1939],{"class":1067},[1050,10203,10205,10207,10209,10211,10213],{"class":1052,"line":10204},266,[1050,10206,1945],{"class":1199},[1050,10208,1949],{"class":1948},[1050,10210,1952],{"class":1071},[1050,10212,1956],{"class":1955},[1050,10214,1959],{"class":1071},[1050,10216,10218,10220,10222,10225,10227],{"class":1052,"line":10217},267,[1050,10219,1965],{"class":1089},[1050,10221,1072],{"class":1071},[1050,10223,10224],{"class":1075},"thresholds",[1050,10226,1093],{"class":1071},[1050,10228,1096],{"class":1071},[1050,10230,10232,10234,10237,10239,10241,10243,10245],{"class":1052,"line":10231},268,[1050,10233,1173],{"class":1102},[1050,10235,10236],{"class":1106},"slow_query_duration",[1050,10238,1110],{"class":1102},[1050,10240,1113],{"class":1071},[1050,10242,3911],{"class":1116},[1050,10244,1491],{"class":1071},[1050,10246,10247],{"class":1056},"  # 500ms\n",[1050,10249,10251,10253,10256,10258,10260,10263,10265],{"class":1052,"line":10250},269,[1050,10252,1173],{"class":1102},[1050,10254,10255],{"class":1106},"high_query_count",[1050,10257,1110],{"class":1102},[1050,10259,1113],{"class":1071},[1050,10261,10262],{"class":1116}," 50",[1050,10264,1491],{"class":1071},[1050,10266,10267],{"class":1056},"      # 50 queries per request\n",[1050,10269,10271,10273,10276,10278,10280,10283,10285],{"class":1052,"line":10270},270,[1050,10272,1173],{"class":1102},[1050,10274,10275],{"class":1106},"long_request_time",[1050,10277,1110],{"class":1102},[1050,10279,1113],{"class":1071},[1050,10281,10282],{"class":1116}," 5.0",[1050,10284,1491],{"class":1071},[1050,10286,10287],{"class":1056},"    # 5 seconds\n",[1050,10289,10291],{"class":1052,"line":10290},271,[1050,10292,2202],{"class":1071},[1050,10294,10296],{"class":1052,"line":10295},272,[1050,10297,1939],{"class":1067},[1050,10299,10301,10303,10306,10308,10310],{"class":1052,"line":10300},273,[1050,10302,1945],{"class":1199},[1050,10304,10305],{"class":2072}," monitor_performance",[1050,10307,1952],{"class":1071},[1050,10309,1956],{"class":1955},[1050,10311,1959],{"class":1071},[1050,10313,10315,10317,10320],{"class":1052,"line":10314},274,[1050,10316,2107],{"class":1925},[1050,10318,10319],{"class":1929},"Run performance monitoring checks",[1050,10321,1933],{"class":1925},[1050,10323,10325],{"class":1052,"line":10324},275,[1050,10326,2118],{"class":1067},[1050,10328,10330,10333,10335],{"class":1052,"line":10329},276,[1050,10331,10332],{"class":1067},"        alerts ",[1050,10334,2096],{"class":1071},[1050,10336,9000],{"class":1071},[1050,10338,10340],{"class":1052,"line":10339},277,[1050,10341,2118],{"class":1067},[1050,10343,10345],{"class":1052,"line":10344},278,[1050,10346,10347],{"class":1056},"        # Check recent performance metrics\n",[1050,10349,10351,10354,10356,10358,10360,10362,10364,10366],{"class":1052,"line":10350},279,[1050,10352,10353],{"class":1067},"        recent_metrics ",[1050,10355,2096],{"class":1071},[1050,10357,6930],{"class":1067},[1050,10359,1072],{"class":1071},[1050,10361,4405],{"class":1075},[1050,10363,1072],{"class":1071},[1050,10365,9063],{"class":1979},[1050,10367,2246],{"class":1071},[1050,10369,10371,10373,10375,10377,10379,10381,10383,10385,10387,10389,10392,10394,10397],{"class":1052,"line":10370},280,[1050,10372,9070],{"class":2295},[1050,10374,2096],{"class":1071},[1050,10376,9075],{"class":1979},[1050,10378,1072],{"class":1071},[1050,10380,9080],{"class":1979},[1050,10382,4199],{"class":1071},[1050,10384,9085],{"class":1479},[1050,10386,9088],{"class":1979},[1050,10388,1952],{"class":1071},[1050,10390,10391],{"class":2295},"minutes",[1050,10393,2096],{"class":1071},[1050,10395,10396],{"class":1116},"5",[1050,10398,1991],{"class":1071},[1050,10400,10402],{"class":1052,"line":10401},281,[1050,10403,2370],{"class":1071},[1050,10405,10407],{"class":1052,"line":10406},282,[1050,10408,2118],{"class":1067},[1050,10410,10412],{"class":1052,"line":10411},283,[1050,10413,10414],{"class":1056},"        # Check for slow requests\n",[1050,10416,10418,10421,10423,10426,10428,10430],{"class":1052,"line":10417},284,[1050,10419,10420],{"class":1067},"        slow_requests ",[1050,10422,2096],{"class":1071},[1050,10424,10425],{"class":1067}," recent_metrics",[1050,10427,1072],{"class":1071},[1050,10429,9063],{"class":1979},[1050,10431,2246],{"class":1071},[1050,10433,10435,10438,10440,10442,10444,10446,10448,10450,10452,10454],{"class":1052,"line":10434},285,[1050,10436,10437],{"class":2295},"            request_time__gte",[1050,10439,2096],{"class":1071},[1050,10441,1956],{"class":1089},[1050,10443,1072],{"class":1071},[1050,10445,10224],{"class":1075},[1050,10447,1274],{"class":1071},[1050,10449,1110],{"class":1102},[1050,10451,10275],{"class":1106},[1050,10453,1110],{"class":1102},[1050,10455,2464],{"class":1071},[1050,10457,10459],{"class":1052,"line":10458},286,[1050,10460,2370],{"class":1071},[1050,10462,10464],{"class":1052,"line":10463},287,[1050,10465,2118],{"class":1067},[1050,10467,10469,10471,10474,10476,10479],{"class":1052,"line":10468},288,[1050,10470,2213],{"class":1063},[1050,10472,10473],{"class":1067}," slow_requests",[1050,10475,1072],{"class":1071},[1050,10477,10478],{"class":1979},"exists",[1050,10480,2827],{"class":1071},[1050,10482,10484,10487,10489,10491],{"class":1052,"line":10483},289,[1050,10485,10486],{"class":1067},"            alerts",[1050,10488,1072],{"class":1071},[1050,10490,9160],{"class":1979},[1050,10492,9163],{"class":1071},[1050,10494,10496,10498,10500,10502,10504,10506,10509,10511],{"class":1052,"line":10495},290,[1050,10497,9168],{"class":1102},[1050,10499,9764],{"class":1106},[1050,10501,1110],{"class":1102},[1050,10503,1113],{"class":1071},[1050,10505,1183],{"class":1102},[1050,10507,10508],{"class":1106},"slow_requests",[1050,10510,1110],{"class":1102},[1050,10512,1120],{"class":1071},[1050,10514,10516,10518,10520,10522,10524,10526,10528,10530],{"class":1052,"line":10515},291,[1050,10517,9168],{"class":1102},[1050,10519,2577],{"class":1106},[1050,10521,1110],{"class":1102},[1050,10523,1113],{"class":1071},[1050,10525,10473],{"class":1979},[1050,10527,1072],{"class":1071},[1050,10529,2577],{"class":1979},[1050,10531,5371],{"class":1071},[1050,10533,10535,10537,10539,10541,10543,10545,10547,10549,10551,10553,10555,10557,10559],{"class":1052,"line":10534},292,[1050,10536,9168],{"class":1102},[1050,10538,9806],{"class":1106},[1050,10540,1110],{"class":1102},[1050,10542,1113],{"class":1071},[1050,10544,2159],{"class":1199},[1050,10546,1110],{"class":1106},[1050,10548,1234],{"class":1186},[1050,10550,10508],{"class":1979},[1050,10552,1072],{"class":1071},[1050,10554,2577],{"class":1979},[1050,10556,4199],{"class":1071},[1050,10558,1203],{"class":1186},[1050,10560,10561],{"class":1106}," slow requests detected in last 5 minutes'\n",[1050,10563,10565],{"class":1052,"line":10564},293,[1050,10566,9256],{"class":1071},[1050,10568,10570],{"class":1052,"line":10569},294,[1050,10571,2118],{"class":1067},[1050,10573,10575],{"class":1052,"line":10574},295,[1050,10576,10577],{"class":1056},"        # Check for high query counts\n",[1050,10579,10581,10584,10586,10588,10590,10592],{"class":1052,"line":10580},296,[1050,10582,10583],{"class":1067},"        high_query_requests ",[1050,10585,2096],{"class":1071},[1050,10587,10425],{"class":1067},[1050,10589,1072],{"class":1071},[1050,10591,9063],{"class":1979},[1050,10593,2246],{"class":1071},[1050,10595,10597,10600,10602,10604,10606,10608,10610,10612,10614,10616],{"class":1052,"line":10596},297,[1050,10598,10599],{"class":2295},"            query_count__gte",[1050,10601,2096],{"class":1071},[1050,10603,1956],{"class":1089},[1050,10605,1072],{"class":1071},[1050,10607,10224],{"class":1075},[1050,10609,1274],{"class":1071},[1050,10611,1110],{"class":1102},[1050,10613,10255],{"class":1106},[1050,10615,1110],{"class":1102},[1050,10617,2464],{"class":1071},[1050,10619,10621],{"class":1052,"line":10620},298,[1050,10622,2370],{"class":1071},[1050,10624,10626],{"class":1052,"line":10625},299,[1050,10627,2118],{"class":1067},[1050,10629,10631,10633,10636,10638,10640],{"class":1052,"line":10630},300,[1050,10632,2213],{"class":1063},[1050,10634,10635],{"class":1067}," high_query_requests",[1050,10637,1072],{"class":1071},[1050,10639,10478],{"class":1979},[1050,10641,2827],{"class":1071},[1050,10643,10645,10647,10649,10651],{"class":1052,"line":10644},301,[1050,10646,10486],{"class":1067},[1050,10648,1072],{"class":1071},[1050,10650,9160],{"class":1979},[1050,10652,9163],{"class":1071},[1050,10654,10656,10658,10660,10662,10664,10666,10668,10670],{"class":1052,"line":10655},302,[1050,10657,9168],{"class":1102},[1050,10659,9764],{"class":1106},[1050,10661,1110],{"class":1102},[1050,10663,1113],{"class":1071},[1050,10665,1183],{"class":1102},[1050,10667,10255],{"class":1106},[1050,10669,1110],{"class":1102},[1050,10671,1120],{"class":1071},[1050,10673,10675,10677,10679,10681,10683,10685,10687,10689],{"class":1052,"line":10674},303,[1050,10676,9168],{"class":1102},[1050,10678,2577],{"class":1106},[1050,10680,1110],{"class":1102},[1050,10682,1113],{"class":1071},[1050,10684,10635],{"class":1979},[1050,10686,1072],{"class":1071},[1050,10688,2577],{"class":1979},[1050,10690,5371],{"class":1071},[1050,10692,10694,10696,10698,10700,10702,10704,10706,10708,10711,10713,10715,10717,10719],{"class":1052,"line":10693},304,[1050,10695,9168],{"class":1102},[1050,10697,9806],{"class":1106},[1050,10699,1110],{"class":1102},[1050,10701,1113],{"class":1071},[1050,10703,2159],{"class":1199},[1050,10705,1110],{"class":1106},[1050,10707,1234],{"class":1186},[1050,10709,10710],{"class":1979},"high_query_requests",[1050,10712,1072],{"class":1071},[1050,10714,2577],{"class":1979},[1050,10716,4199],{"class":1071},[1050,10718,1203],{"class":1186},[1050,10720,10721],{"class":1106}," requests with high query counts detected'\n",[1050,10723,10725],{"class":1052,"line":10724},305,[1050,10726,9256],{"class":1071},[1050,10728,10730],{"class":1052,"line":10729},306,[1050,10731,2118],{"class":1067},[1050,10733,10735],{"class":1052,"line":10734},307,[1050,10736,10737],{"class":1056},"        # Check database connection health\n",[1050,10739,10741,10744,10746,10748,10750,10753],{"class":1052,"line":10740},308,[1050,10742,10743],{"class":1067},"        db_metrics ",[1050,10745,2096],{"class":1071},[1050,10747,7870],{"class":1067},[1050,10749,1072],{"class":1071},[1050,10751,10752],{"class":1979},"collect_connection_metrics",[1050,10754,3335],{"class":1071},[1050,10756,10758,10760,10763,10765,10767,10769,10771,10774,10776,10778,10780,10782,10784,10787,10789],{"class":1052,"line":10757},309,[1050,10759,2213],{"class":1063},[1050,10761,10762],{"class":1067}," db_metrics",[1050,10764,1072],{"class":1071},[1050,10766,4131],{"class":1979},[1050,10768,1952],{"class":1071},[1050,10770,1110],{"class":1102},[1050,10772,10773],{"class":1106},"active_connections",[1050,10775,1110],{"class":1102},[1050,10777,1491],{"class":1071},[1050,10779,2584],{"class":1116},[1050,10781,2056],{"class":1071},[1050,10783,2913],{"class":1479},[1050,10785,10786],{"class":1116}," 80",[1050,10788,1113],{"class":1071},[1050,10790,10791],{"class":1056},"  # Assuming max 100 connections\n",[1050,10793,10795,10797,10799,10801],{"class":1052,"line":10794},310,[1050,10796,10486],{"class":1067},[1050,10798,1072],{"class":1071},[1050,10800,9160],{"class":1979},[1050,10802,9163],{"class":1071},[1050,10804,10806,10808,10810,10812,10814,10816,10819,10821],{"class":1052,"line":10805},311,[1050,10807,9168],{"class":1102},[1050,10809,9764],{"class":1106},[1050,10811,1110],{"class":1102},[1050,10813,1113],{"class":1071},[1050,10815,1183],{"class":1102},[1050,10817,10818],{"class":1106},"high_connections",[1050,10820,1110],{"class":1102},[1050,10822,1120],{"class":1071},[1050,10824,10826,10828,10830,10832,10834,10836,10838,10840,10842,10844],{"class":1052,"line":10825},312,[1050,10827,9168],{"class":1102},[1050,10829,2577],{"class":1106},[1050,10831,1110],{"class":1102},[1050,10833,1113],{"class":1071},[1050,10835,10762],{"class":1979},[1050,10837,1274],{"class":1071},[1050,10839,1110],{"class":1102},[1050,10841,10773],{"class":1106},[1050,10843,1110],{"class":1102},[1050,10845,1711],{"class":1071},[1050,10847,10849,10851,10853,10855,10857,10859,10862,10864,10867,10869,10871,10873,10875,10877,10879],{"class":1052,"line":10848},313,[1050,10850,9168],{"class":1102},[1050,10852,9806],{"class":1106},[1050,10854,1110],{"class":1102},[1050,10856,1113],{"class":1071},[1050,10858,2159],{"class":1199},[1050,10860,10861],{"class":1106},"'High number of active connections: ",[1050,10863,1234],{"class":1186},[1050,10865,10866],{"class":1979},"db_metrics",[1050,10868,1274],{"class":1071},[1050,10870,2162],{"class":1102},[1050,10872,10773],{"class":1106},[1050,10874,2162],{"class":1102},[1050,10876,2282],{"class":1071},[1050,10878,1203],{"class":1186},[1050,10880,6154],{"class":1106},[1050,10882,10884],{"class":1052,"line":10883},314,[1050,10885,9256],{"class":1071},[1050,10887,10889],{"class":1052,"line":10888},315,[1050,10890,2118],{"class":1067},[1050,10892,10894],{"class":1052,"line":10893},316,[1050,10895,10896],{"class":1056},"        # Send alerts if any issues detected\n",[1050,10898,10900,10902,10905],{"class":1052,"line":10899},317,[1050,10901,2213],{"class":1063},[1050,10903,10904],{"class":1067}," alerts",[1050,10906,1919],{"class":1071},[1050,10908,10910,10912,10914,10917,10919,10922],{"class":1052,"line":10909},318,[1050,10911,2234],{"class":1089},[1050,10913,1072],{"class":1071},[1050,10915,10916],{"class":1979},"send_alerts",[1050,10918,1952],{"class":1071},[1050,10920,10921],{"class":1979},"alerts",[1050,10923,1991],{"class":1071},[1050,10925,10927],{"class":1052,"line":10926},319,[1050,10928,2118],{"class":1067},[1050,10930,10932,10934],{"class":1052,"line":10931},320,[1050,10933,2956],{"class":1063},[1050,10935,10936],{"class":1067}," alerts\n",[1050,10938,10940],{"class":1052,"line":10939},321,[1050,10941,1939],{"class":1067},[1050,10943,10945,10947,10950,10952,10954,10956,10958],{"class":1052,"line":10944},322,[1050,10946,1945],{"class":1199},[1050,10948,10949],{"class":2072}," send_alerts",[1050,10951,1952],{"class":1071},[1050,10953,1956],{"class":1955},[1050,10955,1491],{"class":1071},[1050,10957,10904],{"class":2082},[1050,10959,1959],{"class":1071},[1050,10961,10963,10965,10968],{"class":1052,"line":10962},323,[1050,10964,2107],{"class":1925},[1050,10966,10967],{"class":1929},"Send performance alerts",[1050,10969,1933],{"class":1925},[1050,10971,10973],{"class":1052,"line":10972},324,[1050,10974,2118],{"class":1067},[1050,10976,10978],{"class":1052,"line":10977},325,[1050,10979,6049],{"class":1056},[1050,10981,10983,10985,10988,10990,10992],{"class":1052,"line":10982},326,[1050,10984,2426],{"class":1063},[1050,10986,10987],{"class":1067}," alert ",[1050,10989,2432],{"class":1063},[1050,10991,10904],{"class":1067},[1050,10993,1919],{"class":1071},[1050,10995,10997,10999,11001,11003,11005,11007,11010,11012,11014,11016],{"class":1052,"line":10996},327,[1050,10998,3929],{"class":1067},[1050,11000,1072],{"class":1071},[1050,11002,1980],{"class":1979},[1050,11004,1952],{"class":1071},[1050,11006,1110],{"class":1102},[1050,11008,11009],{"class":1106},"performance_alerts",[1050,11011,1110],{"class":1102},[1050,11013,3945],{"class":1071},[1050,11015,5939],{"class":1979},[1050,11017,2246],{"class":1071},[1050,11019,11021,11024,11026,11028,11030,11032],{"class":1052,"line":11020},328,[1050,11022,11023],{"class":1979},"                alert",[1050,11025,1274],{"class":1071},[1050,11027,1110],{"class":1102},[1050,11029,9806],{"class":1106},[1050,11031,1110],{"class":1102},[1050,11033,1711],{"class":1071},[1050,11035,11037,11039,11041],{"class":1052,"line":11036},329,[1050,11038,2296],{"class":2295},[1050,11040,2096],{"class":1071},[1050,11042,11043],{"class":1979},"alert\n",[1050,11045,11047],{"class":1052,"line":11046},330,[1050,11048,2307],{"class":1071},[1050,11050,11052],{"class":1052,"line":11051},331,[1050,11053,1939],{"class":1067},[1050,11055,11057,11059,11062,11064,11066,11068,11071,11073,11076],{"class":1052,"line":11056},332,[1050,11058,1945],{"class":1199},[1050,11060,11061],{"class":2072}," cleanup_old_metrics",[1050,11063,1952],{"class":1071},[1050,11065,1956],{"class":1955},[1050,11067,1491],{"class":1071},[1050,11069,11070],{"class":2082}," days",[1050,11072,2096],{"class":1479},[1050,11074,11075],{"class":1116},"30",[1050,11077,1959],{"class":1071},[1050,11079,11081,11083,11086],{"class":1052,"line":11080},333,[1050,11082,2107],{"class":1925},[1050,11084,11085],{"class":1929},"Clean up old performance metrics",[1050,11087,1933],{"class":1925},[1050,11089,11091],{"class":1052,"line":11090},334,[1050,11092,2118],{"class":1067},[1050,11094,11096,11099,11101,11104,11106,11108,11110,11112,11114,11116,11119,11121,11123],{"class":1052,"line":11095},335,[1050,11097,11098],{"class":1067},"        cutoff_date ",[1050,11100,2096],{"class":1071},[1050,11102,11103],{"class":1067}," timezone",[1050,11105,1072],{"class":1071},[1050,11107,9080],{"class":1979},[1050,11109,4199],{"class":1071},[1050,11111,9085],{"class":1479},[1050,11113,9088],{"class":1979},[1050,11115,1952],{"class":1071},[1050,11117,11118],{"class":2295},"days",[1050,11120,2096],{"class":1071},[1050,11122,11118],{"class":1979},[1050,11124,1991],{"class":1071},[1050,11126,11128],{"class":1052,"line":11127},336,[1050,11129,2118],{"class":1067},[1050,11131,11133],{"class":1052,"line":11132},337,[1050,11134,11135],{"class":1056},"        # Clean up old performance metrics\n",[1050,11137,11139,11142,11144,11146,11148,11150,11152,11154],{"class":1052,"line":11138},338,[1050,11140,11141],{"class":1067},"        deleted_metrics ",[1050,11143,2096],{"class":1071},[1050,11145,6930],{"class":1067},[1050,11147,1072],{"class":1071},[1050,11149,4405],{"class":1075},[1050,11151,1072],{"class":1071},[1050,11153,9063],{"class":1979},[1050,11155,2246],{"class":1071},[1050,11157,11159,11162,11164],{"class":1052,"line":11158},339,[1050,11160,11161],{"class":2295},"            timestamp__lt",[1050,11163,2096],{"class":1071},[1050,11165,11166],{"class":1979},"cutoff_date\n",[1050,11168,11170,11172,11175,11178,11180],{"class":1052,"line":11169},340,[1050,11171,9104],{"class":1071},[1050,11173,11174],{"class":1979},"delete",[1050,11176,11177],{"class":1071},"()[",[1050,11179,8114],{"class":1116},[1050,11181,2464],{"class":1071},[1050,11183,11185],{"class":1052,"line":11184},341,[1050,11186,2118],{"class":1067},[1050,11188,11190],{"class":1052,"line":11189},342,[1050,11191,11192],{"class":1056},"        # Clean up old slow queries\n",[1050,11194,11196,11199,11201,11203,11205,11207,11209,11211],{"class":1052,"line":11195},343,[1050,11197,11198],{"class":1067},"        deleted_queries ",[1050,11200,2096],{"class":1071},[1050,11202,7451],{"class":1067},[1050,11204,1072],{"class":1071},[1050,11206,4405],{"class":1075},[1050,11208,1072],{"class":1071},[1050,11210,9063],{"class":1979},[1050,11212,2246],{"class":1071},[1050,11214,11216,11218,11220],{"class":1052,"line":11215},344,[1050,11217,11161],{"class":2295},[1050,11219,2096],{"class":1071},[1050,11221,11166],{"class":1979},[1050,11223,11225,11227,11229,11231,11233],{"class":1052,"line":11224},345,[1050,11226,9104],{"class":1071},[1050,11228,11174],{"class":1979},[1050,11230,11177],{"class":1071},[1050,11232,8114],{"class":1116},[1050,11234,2464],{"class":1071},[1050,11236,11238],{"class":1052,"line":11237},346,[1050,11239,2118],{"class":1067},[1050,11241,11243,11245],{"class":1052,"line":11242},347,[1050,11244,2956],{"class":1063},[1050,11246,1096],{"class":1071},[1050,11248,11250,11252,11255,11257,11259,11262],{"class":1052,"line":11249},348,[1050,11251,1173],{"class":1102},[1050,11253,11254],{"class":1106},"deleted_metrics",[1050,11256,1110],{"class":1102},[1050,11258,1113],{"class":1071},[1050,11260,11261],{"class":1067}," deleted_metrics",[1050,11263,1120],{"class":1071},[1050,11265,11267,11269,11272,11274,11276],{"class":1052,"line":11266},349,[1050,11268,1173],{"class":1102},[1050,11270,11271],{"class":1106},"deleted_queries",[1050,11273,1110],{"class":1102},[1050,11275,1113],{"class":1071},[1050,11277,11278],{"class":1067}," deleted_queries\n",[1050,11280,11282],{"class":1052,"line":11281},350,[1050,11283,2202],{"class":1071},[1050,11285,11287],{"class":1052,"line":11286},351,[1050,11288,1083],{"emptyLinePlaceholder":1082},[1050,11290,11292],{"class":1052,"line":11291},352,[1050,11293,11294],{"class":1056},"# Management command for performance monitoring\n",[1050,11296,11298,11300,11302,11304,11306],{"class":1052,"line":11297},353,[1050,11299,1368],{"class":1199},[1050,11301,6118],{"class":1915},[1050,11303,1952],{"class":1071},[1050,11305,6124],{"class":6123},[1050,11307,1959],{"class":1071},[1050,11309,11311,11313,11316],{"class":1052,"line":11310},354,[1050,11312,1926],{"class":1925},[1050,11314,11315],{"class":1929},"Performance monitoring management command",[1050,11317,1933],{"class":1925},[1050,11319,11321],{"class":1052,"line":11320},355,[1050,11322,1939],{"class":1067},[1050,11324,11326,11328,11330,11332,11335],{"class":1052,"line":11325},356,[1050,11327,6144],{"class":1948},[1050,11329,1093],{"class":1071},[1050,11331,1183],{"class":1102},[1050,11333,11334],{"class":1106},"Run performance monitoring and analysis",[1050,11336,6154],{"class":1102},[1050,11338,11340],{"class":1052,"line":11339},357,[1050,11341,1939],{"class":1067},[1050,11343,11345,11347,11349,11351,11353,11355,11357],{"class":1052,"line":11344},358,[1050,11346,1945],{"class":1199},[1050,11348,6165],{"class":2072},[1050,11350,1952],{"class":1071},[1050,11352,1956],{"class":1955},[1050,11354,1491],{"class":1071},[1050,11356,6174],{"class":2082},[1050,11358,1959],{"class":1071},[1050,11360,11362,11364,11366,11368,11370,11372,11375,11377,11379,11382,11384,11386,11389,11391,11393,11395,11397,11399,11402,11404],{"class":1052,"line":11361},359,[1050,11363,6181],{"class":1067},[1050,11365,1072],{"class":1071},[1050,11367,6186],{"class":1979},[1050,11369,1952],{"class":1071},[1050,11371,1110],{"class":1102},[1050,11373,11374],{"class":1106},"--analyze",[1050,11376,1110],{"class":1102},[1050,11378,1491],{"class":1071},[1050,11380,11381],{"class":2295}," action",[1050,11383,2096],{"class":1071},[1050,11385,1110],{"class":1102},[1050,11387,11388],{"class":1106},"store_true",[1050,11390,1110],{"class":1102},[1050,11392,1491],{"class":1071},[1050,11394,6219],{"class":2295},[1050,11396,2096],{"class":1071},[1050,11398,1110],{"class":1102},[1050,11400,11401],{"class":1106},"Run performance analysis",[1050,11403,1110],{"class":1102},[1050,11405,1991],{"class":1071},[1050,11407,11409,11411,11413,11415,11417,11419,11422,11424,11426,11428,11430,11432,11434,11436,11438,11440,11442,11444,11447,11449],{"class":1052,"line":11408},360,[1050,11410,6181],{"class":1067},[1050,11412,1072],{"class":1071},[1050,11414,6186],{"class":1979},[1050,11416,1952],{"class":1071},[1050,11418,1110],{"class":1102},[1050,11420,11421],{"class":1106},"--monitor",[1050,11423,1110],{"class":1102},[1050,11425,1491],{"class":1071},[1050,11427,11381],{"class":2295},[1050,11429,2096],{"class":1071},[1050,11431,1110],{"class":1102},[1050,11433,11388],{"class":1106},[1050,11435,1110],{"class":1102},[1050,11437,1491],{"class":1071},[1050,11439,6219],{"class":2295},[1050,11441,2096],{"class":1071},[1050,11443,1110],{"class":1102},[1050,11445,11446],{"class":1106},"Run monitoring checks",[1050,11448,1110],{"class":1102},[1050,11450,1991],{"class":1071},[1050,11452,11454,11456,11458,11460,11462,11464,11467,11469,11471,11473,11475,11477,11479,11481,11483,11485,11487,11489,11492,11494],{"class":1052,"line":11453},361,[1050,11455,6181],{"class":1067},[1050,11457,1072],{"class":1071},[1050,11459,6186],{"class":1979},[1050,11461,1952],{"class":1071},[1050,11463,1110],{"class":1102},[1050,11465,11466],{"class":1106},"--cleanup",[1050,11468,1110],{"class":1102},[1050,11470,1491],{"class":1071},[1050,11472,11381],{"class":2295},[1050,11474,2096],{"class":1071},[1050,11476,1110],{"class":1102},[1050,11478,11388],{"class":1106},[1050,11480,1110],{"class":1102},[1050,11482,1491],{"class":1071},[1050,11484,6219],{"class":2295},[1050,11486,2096],{"class":1071},[1050,11488,1110],{"class":1102},[1050,11490,11491],{"class":1106},"Clean up old metrics",[1050,11493,1110],{"class":1102},[1050,11495,1991],{"class":1071},[1050,11497,11499,11501,11503,11505,11507,11509,11512,11514,11516,11518,11520,11522,11524,11526,11528,11530,11532,11534,11537,11539],{"class":1052,"line":11498},362,[1050,11500,6181],{"class":1067},[1050,11502,1072],{"class":1071},[1050,11504,6186],{"class":1979},[1050,11506,1952],{"class":1071},[1050,11508,1110],{"class":1102},[1050,11510,11511],{"class":1106},"--report",[1050,11513,1110],{"class":1102},[1050,11515,1491],{"class":1071},[1050,11517,11381],{"class":2295},[1050,11519,2096],{"class":1071},[1050,11521,1110],{"class":1102},[1050,11523,11388],{"class":1106},[1050,11525,1110],{"class":1102},[1050,11527,1491],{"class":1071},[1050,11529,6219],{"class":2295},[1050,11531,2096],{"class":1071},[1050,11533,1110],{"class":1102},[1050,11535,11536],{"class":1106},"Generate performance report",[1050,11538,1110],{"class":1102},[1050,11540,1991],{"class":1071},[1050,11542,11544],{"class":1052,"line":11543},363,[1050,11545,1939],{"class":1067},[1050,11547,11549,11551,11553,11555,11557,11559,11561,11563,11565,11567,11569],{"class":1052,"line":11548},364,[1050,11550,1945],{"class":1199},[1050,11552,6289],{"class":2072},[1050,11554,1952],{"class":1071},[1050,11556,1956],{"class":1955},[1050,11558,1491],{"class":1071},[1050,11560,6298],{"class":1479},[1050,11562,6301],{"class":2082},[1050,11564,1491],{"class":1071},[1050,11566,6306],{"class":1479},[1050,11568,6309],{"class":2082},[1050,11570,1959],{"class":1071},[1050,11572,11574,11576,11578,11580],{"class":1052,"line":11573},365,[1050,11575,6316],{"class":1067},[1050,11577,2096],{"class":1071},[1050,11579,10184],{"class":1979},[1050,11581,3335],{"class":1071},[1050,11583,11585],{"class":1052,"line":11584},366,[1050,11586,2118],{"class":1067},[1050,11588,11590,11592,11594,11596,11598,11601,11603],{"class":1052,"line":11589},367,[1050,11591,2213],{"class":1063},[1050,11593,6336],{"class":1067},[1050,11595,1274],{"class":1071},[1050,11597,1110],{"class":1102},[1050,11599,11600],{"class":1106},"analyze",[1050,11602,1110],{"class":1102},[1050,11604,11605],{"class":1071},"]:\n",[1050,11607,11609,11611,11613,11615,11617,11619,11621,11623,11626,11628],{"class":1052,"line":11608},368,[1050,11610,2234],{"class":1089},[1050,11612,1072],{"class":1071},[1050,11614,6360],{"class":1075},[1050,11616,1072],{"class":1071},[1050,11618,6365],{"class":1979},[1050,11620,1952],{"class":1071},[1050,11622,1110],{"class":1102},[1050,11624,11625],{"class":1106},"Running performance analysis...",[1050,11627,1110],{"class":1102},[1050,11629,1991],{"class":1071},[1050,11631,11633,11636,11638,11640,11642,11645],{"class":1052,"line":11632},369,[1050,11634,11635],{"class":1067},"            analysis ",[1050,11637,2096],{"class":1071},[1050,11639,7870],{"class":1067},[1050,11641,1072],{"class":1071},[1050,11643,11644],{"class":1979},"analyze_query_performance",[1050,11646,3335],{"class":1071},[1050,11648,11650],{"class":1052,"line":11649},370,[1050,11651,2499],{"class":1067},[1050,11653,11655,11657,11659,11661,11663,11665,11667,11669,11672,11674,11677,11679,11681,11683,11685,11687,11689,11691,11693,11695],{"class":1052,"line":11654},371,[1050,11656,2234],{"class":1089},[1050,11658,1072],{"class":1071},[1050,11660,6360],{"class":1075},[1050,11662,1072],{"class":1071},[1050,11664,6365],{"class":1979},[1050,11666,1952],{"class":1071},[1050,11668,6711],{"class":1199},[1050,11670,11671],{"class":1106},"\"Slow queries found: ",[1050,11673,1234],{"class":1186},[1050,11675,11676],{"class":1948},"len",[1050,11678,1952],{"class":1071},[1050,11680,9596],{"class":1979},[1050,11682,1274],{"class":1071},[1050,11684,1110],{"class":1102},[1050,11686,1761],{"class":1106},[1050,11688,1110],{"class":1102},[1050,11690,3592],{"class":1071},[1050,11692,1203],{"class":1186},[1050,11694,2162],{"class":1106},[1050,11696,1991],{"class":1071},[1050,11698,11700,11702,11704,11706,11708,11710,11712,11714,11717,11719,11721,11723,11725,11727,11729,11731,11733,11735,11737,11739],{"class":1052,"line":11699},372,[1050,11701,2234],{"class":1089},[1050,11703,1072],{"class":1071},[1050,11705,6360],{"class":1075},[1050,11707,1072],{"class":1071},[1050,11709,6365],{"class":1979},[1050,11711,1952],{"class":1071},[1050,11713,6711],{"class":1199},[1050,11715,11716],{"class":1106},"\"Query patterns analyzed: ",[1050,11718,1234],{"class":1186},[1050,11720,11676],{"class":1948},[1050,11722,1952],{"class":1071},[1050,11724,9596],{"class":1979},[1050,11726,1274],{"class":1071},[1050,11728,1110],{"class":1102},[1050,11730,8966],{"class":1106},[1050,11732,1110],{"class":1102},[1050,11734,3592],{"class":1071},[1050,11736,1203],{"class":1186},[1050,11738,2162],{"class":1106},[1050,11740,1991],{"class":1071},[1050,11742,11744,11746,11748,11750,11752,11754,11756,11758,11761,11763,11765,11767,11769,11771,11773,11775,11777,11779,11781,11783],{"class":1052,"line":11743},373,[1050,11745,2234],{"class":1089},[1050,11747,1072],{"class":1071},[1050,11749,6360],{"class":1075},[1050,11751,1072],{"class":1071},[1050,11753,6365],{"class":1979},[1050,11755,1952],{"class":1071},[1050,11757,6711],{"class":1199},[1050,11759,11760],{"class":1106},"\"Recommendations: ",[1050,11762,1234],{"class":1186},[1050,11764,11676],{"class":1948},[1050,11766,1952],{"class":1071},[1050,11768,9596],{"class":1979},[1050,11770,1274],{"class":1071},[1050,11772,1110],{"class":1102},[1050,11774,8993],{"class":1106},[1050,11776,1110],{"class":1102},[1050,11778,3592],{"class":1071},[1050,11780,1203],{"class":1186},[1050,11782,2162],{"class":1106},[1050,11784,1991],{"class":1071},[1050,11786,11788],{"class":1052,"line":11787},374,[1050,11789,2499],{"class":1067},[1050,11791,11793,11795,11798,11800,11802,11804,11806,11808,11810],{"class":1052,"line":11792},375,[1050,11794,4181],{"class":1063},[1050,11796,11797],{"class":1067}," rec ",[1050,11799,2432],{"class":1063},[1050,11801,9689],{"class":1067},[1050,11803,1274],{"class":1071},[1050,11805,1110],{"class":1102},[1050,11807,8993],{"class":1106},[1050,11809,1110],{"class":1102},[1050,11811,11605],{"class":1071},[1050,11813,11815,11817,11819,11821,11823,11825,11827,11829,11832,11834,11837,11839,11841,11843,11845,11847,11849,11851,11853,11856,11858,11860,11862,11864,11866,11868,11870,11872,11874],{"class":1052,"line":11814},376,[1050,11816,4888],{"class":1089},[1050,11818,1072],{"class":1071},[1050,11820,6360],{"class":1075},[1050,11822,1072],{"class":1071},[1050,11824,6365],{"class":1979},[1050,11826,1952],{"class":1071},[1050,11828,6711],{"class":1199},[1050,11830,11831],{"class":1106},"\"  ",[1050,11833,1234],{"class":1186},[1050,11835,11836],{"class":1979},"rec",[1050,11838,1274],{"class":1071},[1050,11840,1110],{"class":1102},[1050,11842,9785],{"class":1106},[1050,11844,1110],{"class":1102},[1050,11846,9157],{"class":1071},[1050,11848,5531],{"class":1979},[1050,11850,4199],{"class":1071},[1050,11852,1203],{"class":1186},[1050,11854,11855],{"class":1106},": ",[1050,11857,1234],{"class":1186},[1050,11859,11836],{"class":1979},[1050,11861,1274],{"class":1071},[1050,11863,1110],{"class":1102},[1050,11865,9806],{"class":1106},[1050,11867,1110],{"class":1102},[1050,11869,2282],{"class":1071},[1050,11871,1203],{"class":1186},[1050,11873,2162],{"class":1106},[1050,11875,1991],{"class":1071},[1050,11877,11879],{"class":1052,"line":11878},377,[1050,11880,2118],{"class":1067},[1050,11882,11884,11886,11888,11890,11892,11895,11897],{"class":1052,"line":11883},378,[1050,11885,2213],{"class":1063},[1050,11887,6336],{"class":1067},[1050,11889,1274],{"class":1071},[1050,11891,1110],{"class":1102},[1050,11893,11894],{"class":1106},"monitor",[1050,11896,1110],{"class":1102},[1050,11898,11605],{"class":1071},[1050,11900,11902,11904,11906,11908,11910,11912,11914,11916,11919,11921],{"class":1052,"line":11901},379,[1050,11903,2234],{"class":1089},[1050,11905,1072],{"class":1071},[1050,11907,6360],{"class":1075},[1050,11909,1072],{"class":1071},[1050,11911,6365],{"class":1979},[1050,11913,1952],{"class":1071},[1050,11915,1110],{"class":1102},[1050,11917,11918],{"class":1106},"Running monitoring checks...",[1050,11920,1110],{"class":1102},[1050,11922,1991],{"class":1071},[1050,11924,11926,11929,11931,11933,11935,11938],{"class":1052,"line":11925},380,[1050,11927,11928],{"class":1067},"            alerts ",[1050,11930,2096],{"class":1071},[1050,11932,6480],{"class":1067},[1050,11934,1072],{"class":1071},[1050,11936,11937],{"class":1979},"monitor_performance",[1050,11939,3335],{"class":1071},[1050,11941,11943],{"class":1052,"line":11942},381,[1050,11944,2499],{"class":1067},[1050,11946,11948,11950,11952],{"class":1052,"line":11947},382,[1050,11949,2537],{"class":1063},[1050,11951,10904],{"class":1067},[1050,11953,1919],{"class":1071},[1050,11955,11957,11959,11961,11963,11965,11967,11969,11971,11974,11976,11978,11980,11982,11984,11986,11988],{"class":1052,"line":11956},383,[1050,11958,4888],{"class":1089},[1050,11960,1072],{"class":1071},[1050,11962,6360],{"class":1075},[1050,11964,1072],{"class":1071},[1050,11966,6365],{"class":1979},[1050,11968,1952],{"class":1071},[1050,11970,6711],{"class":1199},[1050,11972,11973],{"class":1106},"\"Alerts generated: ",[1050,11975,1234],{"class":1186},[1050,11977,11676],{"class":1948},[1050,11979,1952],{"class":1071},[1050,11981,10921],{"class":1979},[1050,11983,2056],{"class":1071},[1050,11985,1203],{"class":1186},[1050,11987,2162],{"class":1106},[1050,11989,1991],{"class":1071},[1050,11991,11993,11995,11997,11999,12001],{"class":1052,"line":11992},384,[1050,11994,8237],{"class":1063},[1050,11996,10987],{"class":1067},[1050,11998,2432],{"class":1063},[1050,12000,10904],{"class":1067},[1050,12002,1919],{"class":1071},[1050,12004,12006,12008,12010,12012,12014,12016,12018,12020,12022,12024,12027,12029,12031,12033,12035,12037,12039,12041,12043,12045,12047,12049,12051,12053,12055,12057,12059],{"class":1052,"line":12005},385,[1050,12007,5664],{"class":1089},[1050,12009,1072],{"class":1071},[1050,12011,6360],{"class":1075},[1050,12013,1072],{"class":1071},[1050,12015,6365],{"class":1979},[1050,12017,1952],{"class":1071},[1050,12019,6711],{"class":1199},[1050,12021,11831],{"class":1106},[1050,12023,1234],{"class":1186},[1050,12025,12026],{"class":1979},"alert",[1050,12028,1274],{"class":1071},[1050,12030,1110],{"class":1102},[1050,12032,9764],{"class":1106},[1050,12034,1110],{"class":1102},[1050,12036,2282],{"class":1071},[1050,12038,1203],{"class":1186},[1050,12040,11855],{"class":1106},[1050,12042,1234],{"class":1186},[1050,12044,12026],{"class":1979},[1050,12046,1274],{"class":1071},[1050,12048,1110],{"class":1102},[1050,12050,9806],{"class":1106},[1050,12052,1110],{"class":1102},[1050,12054,2282],{"class":1071},[1050,12056,1203],{"class":1186},[1050,12058,2162],{"class":1106},[1050,12060,1991],{"class":1071},[1050,12062,12064,12066],{"class":1052,"line":12063},386,[1050,12065,5680],{"class":1063},[1050,12067,1919],{"class":1071},[1050,12069,12071,12073,12075,12077,12079,12081,12083,12085,12088,12090],{"class":1052,"line":12070},387,[1050,12072,4888],{"class":1089},[1050,12074,1072],{"class":1071},[1050,12076,6360],{"class":1075},[1050,12078,1072],{"class":1071},[1050,12080,6365],{"class":1979},[1050,12082,1952],{"class":1071},[1050,12084,1110],{"class":1102},[1050,12086,12087],{"class":1106},"No performance issues detected",[1050,12089,1110],{"class":1102},[1050,12091,1991],{"class":1071},[1050,12093,12095],{"class":1052,"line":12094},388,[1050,12096,2118],{"class":1067},[1050,12098,12100,12102,12104,12106,12108,12111,12113],{"class":1052,"line":12099},389,[1050,12101,2213],{"class":1063},[1050,12103,6336],{"class":1067},[1050,12105,1274],{"class":1071},[1050,12107,1110],{"class":1102},[1050,12109,12110],{"class":1106},"cleanup",[1050,12112,1110],{"class":1102},[1050,12114,11605],{"class":1071},[1050,12116,12118,12120,12122,12124,12126,12128,12130,12132,12135,12137],{"class":1052,"line":12117},390,[1050,12119,2234],{"class":1089},[1050,12121,1072],{"class":1071},[1050,12123,6360],{"class":1075},[1050,12125,1072],{"class":1071},[1050,12127,6365],{"class":1979},[1050,12129,1952],{"class":1071},[1050,12131,1110],{"class":1102},[1050,12133,12134],{"class":1106},"Cleaning up old metrics...",[1050,12136,1110],{"class":1102},[1050,12138,1991],{"class":1071},[1050,12140,12142,12145,12147,12149,12151,12154],{"class":1052,"line":12141},391,[1050,12143,12144],{"class":1067},"            cleanup_result ",[1050,12146,2096],{"class":1071},[1050,12148,6480],{"class":1067},[1050,12150,1072],{"class":1071},[1050,12152,12153],{"class":1979},"cleanup_old_metrics",[1050,12155,3335],{"class":1071},[1050,12157,12159,12161,12163,12165,12167,12169,12171,12173,12176,12178,12181,12183,12185,12187,12189,12191,12193,12196],{"class":1052,"line":12158},392,[1050,12160,2234],{"class":1089},[1050,12162,1072],{"class":1071},[1050,12164,6360],{"class":1075},[1050,12166,1072],{"class":1071},[1050,12168,6365],{"class":1979},[1050,12170,1952],{"class":1071},[1050,12172,6711],{"class":1199},[1050,12174,12175],{"class":1106},"\"Deleted ",[1050,12177,1234],{"class":1186},[1050,12179,12180],{"class":1979},"cleanup_result",[1050,12182,1274],{"class":1071},[1050,12184,1110],{"class":1102},[1050,12186,11254],{"class":1106},[1050,12188,1110],{"class":1102},[1050,12190,2282],{"class":1071},[1050,12192,1203],{"class":1186},[1050,12194,12195],{"class":1106}," metrics\"",[1050,12197,1991],{"class":1071},[1050,12199,12201,12203,12205,12207,12209,12211,12213,12215,12217,12219,12221,12223,12225,12227,12229,12231,12233,12236],{"class":1052,"line":12200},393,[1050,12202,2234],{"class":1089},[1050,12204,1072],{"class":1071},[1050,12206,6360],{"class":1075},[1050,12208,1072],{"class":1071},[1050,12210,6365],{"class":1979},[1050,12212,1952],{"class":1071},[1050,12214,6711],{"class":1199},[1050,12216,12175],{"class":1106},[1050,12218,1234],{"class":1186},[1050,12220,12180],{"class":1979},[1050,12222,1274],{"class":1071},[1050,12224,1110],{"class":1102},[1050,12226,11271],{"class":1106},[1050,12228,1110],{"class":1102},[1050,12230,2282],{"class":1071},[1050,12232,1203],{"class":1186},[1050,12234,12235],{"class":1106}," slow queries\"",[1050,12237,1991],{"class":1071},[1050,12239,12241],{"class":1052,"line":12240},394,[1050,12242,2118],{"class":1067},[1050,12244,12246,12248,12250,12252,12254,12257,12259],{"class":1052,"line":12245},395,[1050,12247,2213],{"class":1063},[1050,12249,6336],{"class":1067},[1050,12251,1274],{"class":1071},[1050,12253,1110],{"class":1102},[1050,12255,12256],{"class":1106},"report",[1050,12258,1110],{"class":1102},[1050,12260,11605],{"class":1071},[1050,12262,12264,12266,12268,12270,12272,12274,12276,12278,12281,12283],{"class":1052,"line":12263},396,[1050,12265,2234],{"class":1089},[1050,12267,1072],{"class":1071},[1050,12269,6360],{"class":1075},[1050,12271,1072],{"class":1071},[1050,12273,6365],{"class":1979},[1050,12275,1952],{"class":1071},[1050,12277,1110],{"class":1102},[1050,12279,12280],{"class":1106},"Generating performance report...",[1050,12282,1110],{"class":1102},[1050,12284,1991],{"class":1071},[1050,12286,12288,12290,12292,12295],{"class":1052,"line":12287},397,[1050,12289,2234],{"class":1089},[1050,12291,1072],{"class":1071},[1050,12293,12294],{"class":1979},"generate_performance_report",[1050,12296,3335],{"class":1071},[1050,12298,12300],{"class":1052,"line":12299},398,[1050,12301,1939],{"class":1067},[1050,12303,12305,12307,12310,12312,12314],{"class":1052,"line":12304},399,[1050,12306,1945],{"class":1199},[1050,12308,12309],{"class":2072}," generate_performance_report",[1050,12311,1952],{"class":1071},[1050,12313,1956],{"class":1955},[1050,12315,1959],{"class":1071},[1050,12317,12319,12321,12324],{"class":1052,"line":12318},400,[1050,12320,2107],{"class":1925},[1050,12322,12323],{"class":1929},"Generate comprehensive performance report",[1050,12325,1933],{"class":1925},[1050,12327,12329],{"class":1052,"line":12328},401,[1050,12330,2118],{"class":1067},[1050,12332,12334],{"class":1052,"line":12333},402,[1050,12335,12336],{"class":1056},"        # Collect metrics\n",[1050,12338,12340,12342,12344,12346,12348,12350],{"class":1052,"line":12339},403,[1050,12341,10743],{"class":1067},[1050,12343,2096],{"class":1071},[1050,12345,7870],{"class":1067},[1050,12347,1072],{"class":1071},[1050,12349,10752],{"class":1979},[1050,12351,3335],{"class":1071},[1050,12353,12355,12357,12359,12361,12363,12366],{"class":1052,"line":12354},404,[1050,12356,8358],{"class":1067},[1050,12358,2096],{"class":1071},[1050,12360,7870],{"class":1067},[1050,12362,1072],{"class":1071},[1050,12364,12365],{"class":1979},"collect_table_metrics",[1050,12367,3335],{"class":1071},[1050,12369,12371,12373,12375,12377,12379,12382],{"class":1052,"line":12370},405,[1050,12372,8673],{"class":1067},[1050,12374,2096],{"class":1071},[1050,12376,7870],{"class":1067},[1050,12378,1072],{"class":1071},[1050,12380,12381],{"class":1979},"collect_index_metrics",[1050,12383,3335],{"class":1071},[1050,12385,12387],{"class":1052,"line":12386},406,[1050,12388,2118],{"class":1067},[1050,12390,12392,12394,12396,12398,12400,12402,12404,12406,12408,12411,12413],{"class":1052,"line":12391},407,[1050,12393,1965],{"class":1089},[1050,12395,1072],{"class":1071},[1050,12397,6360],{"class":1075},[1050,12399,1072],{"class":1071},[1050,12401,6365],{"class":1979},[1050,12403,1952],{"class":1071},[1050,12405,1110],{"class":1102},[1050,12407,6687],{"class":1089},[1050,12409,12410],{"class":1106},"=== Database Performance Report ===",[1050,12412,1110],{"class":1102},[1050,12414,1991],{"class":1071},[1050,12416,12418],{"class":1052,"line":12417},408,[1050,12419,2118],{"class":1067},[1050,12421,12423],{"class":1052,"line":12422},409,[1050,12424,12425],{"class":1056},"        # Connection metrics\n",[1050,12427,12429,12431,12433,12435,12437,12439,12441,12443,12445,12447,12450],{"class":1052,"line":12428},410,[1050,12430,1965],{"class":1089},[1050,12432,1072],{"class":1071},[1050,12434,6360],{"class":1075},[1050,12436,1072],{"class":1071},[1050,12438,6365],{"class":1979},[1050,12440,1952],{"class":1071},[1050,12442,6711],{"class":1199},[1050,12444,2162],{"class":1106},[1050,12446,6687],{"class":1089},[1050,12448,12449],{"class":1106},"Connection Metrics:\"",[1050,12451,1991],{"class":1071},[1050,12453,12455,12457,12459,12461,12463,12465,12467,12469,12472,12474,12476,12478,12480,12482,12484,12486,12488,12490,12492,12495,12497,12499,12501,12503],{"class":1052,"line":12454},411,[1050,12456,1965],{"class":1089},[1050,12458,1072],{"class":1071},[1050,12460,6360],{"class":1075},[1050,12462,1072],{"class":1071},[1050,12464,6365],{"class":1979},[1050,12466,1952],{"class":1071},[1050,12468,6711],{"class":1199},[1050,12470,12471],{"class":1106},"\"  Active connections: ",[1050,12473,1234],{"class":1186},[1050,12475,10866],{"class":1979},[1050,12477,1072],{"class":1071},[1050,12479,4131],{"class":1979},[1050,12481,1952],{"class":1071},[1050,12483,1110],{"class":1102},[1050,12485,10773],{"class":1106},[1050,12487,1110],{"class":1102},[1050,12489,1491],{"class":1071},[1050,12491,1183],{"class":1102},[1050,12493,12494],{"class":1106},"N/A",[1050,12496,1110],{"class":1102},[1050,12498,2056],{"class":1071},[1050,12500,1203],{"class":1186},[1050,12502,2162],{"class":1106},[1050,12504,1991],{"class":1071},[1050,12506,12508,12510,12512,12514,12516,12518,12520,12522,12525,12527,12529,12531,12533,12535,12537,12540,12542,12544,12546,12548,12550,12552,12554,12556],{"class":1052,"line":12507},412,[1050,12509,1965],{"class":1089},[1050,12511,1072],{"class":1071},[1050,12513,6360],{"class":1075},[1050,12515,1072],{"class":1071},[1050,12517,6365],{"class":1979},[1050,12519,1952],{"class":1071},[1050,12521,6711],{"class":1199},[1050,12523,12524],{"class":1106},"\"  Transactions committed: ",[1050,12526,1234],{"class":1186},[1050,12528,10866],{"class":1979},[1050,12530,1072],{"class":1071},[1050,12532,4131],{"class":1979},[1050,12534,1952],{"class":1071},[1050,12536,1110],{"class":1102},[1050,12538,12539],{"class":1106},"transactions_committed",[1050,12541,1110],{"class":1102},[1050,12543,1491],{"class":1071},[1050,12545,1183],{"class":1102},[1050,12547,12494],{"class":1106},[1050,12549,1110],{"class":1102},[1050,12551,2056],{"class":1071},[1050,12553,1203],{"class":1186},[1050,12555,2162],{"class":1106},[1050,12557,1991],{"class":1071},[1050,12559,12561,12563,12565,12567,12569,12571,12573,12575,12578,12580,12582,12584,12586,12588,12590,12593,12595,12597,12599,12601,12603,12605,12607,12609],{"class":1052,"line":12560},413,[1050,12562,1965],{"class":1089},[1050,12564,1072],{"class":1071},[1050,12566,6360],{"class":1075},[1050,12568,1072],{"class":1071},[1050,12570,6365],{"class":1979},[1050,12572,1952],{"class":1071},[1050,12574,6711],{"class":1199},[1050,12576,12577],{"class":1106},"\"  Transactions rolled back: ",[1050,12579,1234],{"class":1186},[1050,12581,10866],{"class":1979},[1050,12583,1072],{"class":1071},[1050,12585,4131],{"class":1979},[1050,12587,1952],{"class":1071},[1050,12589,1110],{"class":1102},[1050,12591,12592],{"class":1106},"transactions_rolled_back",[1050,12594,1110],{"class":1102},[1050,12596,1491],{"class":1071},[1050,12598,1183],{"class":1102},[1050,12600,12494],{"class":1106},[1050,12602,1110],{"class":1102},[1050,12604,2056],{"class":1071},[1050,12606,1203],{"class":1186},[1050,12608,2162],{"class":1106},[1050,12610,1991],{"class":1071},[1050,12612,12614],{"class":1052,"line":12613},414,[1050,12615,2118],{"class":1067},[1050,12617,12619],{"class":1052,"line":12618},415,[1050,12620,12621],{"class":1056},"        # Top tables by activity\n",[1050,12623,12625,12627,12629,12631,12633,12635,12637,12639,12641,12643,12646],{"class":1052,"line":12624},416,[1050,12626,1965],{"class":1089},[1050,12628,1072],{"class":1071},[1050,12630,6360],{"class":1075},[1050,12632,1072],{"class":1071},[1050,12634,6365],{"class":1979},[1050,12636,1952],{"class":1071},[1050,12638,6711],{"class":1199},[1050,12640,2162],{"class":1106},[1050,12642,6687],{"class":1089},[1050,12644,12645],{"class":1106},"Top 5 Most Active Tables:\"",[1050,12647,1991],{"class":1071},[1050,12649,12651,12654,12656,12659],{"class":1052,"line":12650},417,[1050,12652,12653],{"class":1067},"        sorted_tables ",[1050,12655,2096],{"class":1071},[1050,12657,12658],{"class":1948}," sorted",[1050,12660,2246],{"class":1071},[1050,12662,12664,12667,12669,12671],{"class":1052,"line":12663},418,[1050,12665,12666],{"class":1979},"            table_metrics",[1050,12668,1072],{"class":1071},[1050,12670,2824],{"class":1979},[1050,12672,5371],{"class":1071},[1050,12674,12676,12679,12681,12684,12687,12689,12692,12695,12697,12699,12701,12703,12706,12708,12710,12712,12714,12716,12718,12720,12722,12724,12726,12728,12730,12733,12735,12737,12739,12741],{"class":1052,"line":12675},419,[1050,12677,12678],{"class":2295},"            key",[1050,12680,2096],{"class":1071},[1050,12682,12683],{"class":1199},"lambda",[1050,12685,12686],{"class":2082}," x",[1050,12688,1113],{"class":1071},[1050,12690,12691],{"class":1071}," (",[1050,12693,12694],{"class":1979},"x",[1050,12696,1274],{"class":1071},[1050,12698,6443],{"class":1116},[1050,12700,5606],{"class":1071},[1050,12702,1110],{"class":1102},[1050,12704,12705],{"class":1106},"seq_tup_read",[1050,12707,1110],{"class":1102},[1050,12709,2282],{"class":1071},[1050,12711,3903],{"class":1479},[1050,12713,2584],{"class":1116},[1050,12715,2056],{"class":1071},[1050,12717,4144],{"class":1479},[1050,12719,12691],{"class":1071},[1050,12721,12694],{"class":1979},[1050,12723,1274],{"class":1071},[1050,12725,6443],{"class":1116},[1050,12727,5606],{"class":1071},[1050,12729,1110],{"class":1102},[1050,12731,12732],{"class":1106},"idx_tup_fetch",[1050,12734,1110],{"class":1102},[1050,12736,2282],{"class":1071},[1050,12738,3903],{"class":1479},[1050,12740,2584],{"class":1116},[1050,12742,2644],{"class":1071},[1050,12744,12746,12749,12751],{"class":1052,"line":12745},420,[1050,12747,12748],{"class":2295},"            reverse",[1050,12750,2096],{"class":1071},[1050,12752,12753],{"class":1135},"True\n",[1050,12755,12757,12760,12762],{"class":1052,"line":12756},421,[1050,12758,12759],{"class":1071},"        )[:",[1050,12761,10396],{"class":1116},[1050,12763,2464],{"class":1071},[1050,12765,12767],{"class":1052,"line":12766},422,[1050,12768,2118],{"class":1067},[1050,12770,12772,12774,12777,12779,12782,12784,12787],{"class":1052,"line":12771},423,[1050,12773,2426],{"class":1063},[1050,12775,12776],{"class":1067}," table_name",[1050,12778,1491],{"class":1071},[1050,12780,12781],{"class":1067}," metrics ",[1050,12783,2432],{"class":1063},[1050,12785,12786],{"class":1067}," sorted_tables",[1050,12788,1919],{"class":1071},[1050,12790,12792,12795,12797,12799,12801,12803,12805,12807,12809,12811,12813,12815,12817,12819,12821,12823,12825,12827,12829,12831,12833,12835,12837],{"class":1052,"line":12791},424,[1050,12793,12794],{"class":1067},"            total_reads ",[1050,12796,2096],{"class":1071},[1050,12798,12691],{"class":1071},[1050,12800,4418],{"class":1067},[1050,12802,1274],{"class":1071},[1050,12804,1110],{"class":1102},[1050,12806,12705],{"class":1106},[1050,12808,1110],{"class":1102},[1050,12810,2282],{"class":1071},[1050,12812,3903],{"class":1479},[1050,12814,2584],{"class":1116},[1050,12816,2056],{"class":1071},[1050,12818,4144],{"class":1479},[1050,12820,12691],{"class":1071},[1050,12822,4418],{"class":1067},[1050,12824,1274],{"class":1071},[1050,12826,1110],{"class":1102},[1050,12828,12732],{"class":1106},[1050,12830,1110],{"class":1102},[1050,12832,2282],{"class":1071},[1050,12834,3903],{"class":1479},[1050,12836,2584],{"class":1116},[1050,12838,1991],{"class":1071},[1050,12840,12842,12844,12846,12848,12850,12852,12854,12856,12858,12860,12862,12864,12866,12868,12871,12874,12876,12879],{"class":1052,"line":12841},425,[1050,12843,2234],{"class":1089},[1050,12845,1072],{"class":1071},[1050,12847,6360],{"class":1075},[1050,12849,1072],{"class":1071},[1050,12851,6365],{"class":1979},[1050,12853,1952],{"class":1071},[1050,12855,6711],{"class":1199},[1050,12857,11831],{"class":1106},[1050,12859,1234],{"class":1186},[1050,12861,8605],{"class":1979},[1050,12863,1203],{"class":1186},[1050,12865,11855],{"class":1106},[1050,12867,1234],{"class":1186},[1050,12869,12870],{"class":1979},"total_reads",[1050,12872,12873],{"class":1199},":,",[1050,12875,1203],{"class":1186},[1050,12877,12878],{"class":1106}," tuples read\"",[1050,12880,1991],{"class":1071},[1050,12882,12884],{"class":1052,"line":12883},426,[1050,12885,2118],{"class":1067},[1050,12887,12889],{"class":1052,"line":12888},427,[1050,12890,12891],{"class":1056},"        # Index usage\n",[1050,12893,12895,12897,12899,12901,12903,12905,12907,12909,12911,12913,12916],{"class":1052,"line":12894},428,[1050,12896,1965],{"class":1089},[1050,12898,1072],{"class":1071},[1050,12900,6360],{"class":1075},[1050,12902,1072],{"class":1071},[1050,12904,6365],{"class":1979},[1050,12906,1952],{"class":1071},[1050,12908,6711],{"class":1199},[1050,12910,2162],{"class":1106},[1050,12912,6687],{"class":1089},[1050,12914,12915],{"class":1106},"Top 5 Most Used Indexes:\"",[1050,12917,1991],{"class":1071},[1050,12919,12921,12924,12926,12928],{"class":1052,"line":12920},429,[1050,12922,12923],{"class":1067},"        sorted_indexes ",[1050,12925,2096],{"class":1071},[1050,12927,12658],{"class":1948},[1050,12929,2246],{"class":1071},[1050,12931,12933,12936,12938,12940],{"class":1052,"line":12932},430,[1050,12934,12935],{"class":1979},"            index_metrics",[1050,12937,1072],{"class":1071},[1050,12939,2824],{"class":1979},[1050,12941,5371],{"class":1071},[1050,12943,12945,12947,12949,12951,12953,12955,12957,12959,12961,12963,12965,12968,12970,12972,12974,12976],{"class":1052,"line":12944},431,[1050,12946,12678],{"class":2295},[1050,12948,2096],{"class":1071},[1050,12950,12683],{"class":1199},[1050,12952,12686],{"class":2082},[1050,12954,1113],{"class":1071},[1050,12956,12686],{"class":1979},[1050,12958,1274],{"class":1071},[1050,12960,6443],{"class":1116},[1050,12962,5606],{"class":1071},[1050,12964,1110],{"class":1102},[1050,12966,12967],{"class":1106},"scans",[1050,12969,1110],{"class":1102},[1050,12971,2282],{"class":1071},[1050,12973,3903],{"class":1063},[1050,12975,2584],{"class":1116},[1050,12977,1120],{"class":1071},[1050,12979,12981,12983,12985],{"class":1052,"line":12980},432,[1050,12982,12748],{"class":2295},[1050,12984,2096],{"class":1071},[1050,12986,12753],{"class":1135},[1050,12988,12990,12992,12994],{"class":1052,"line":12989},433,[1050,12991,12759],{"class":1071},[1050,12993,10396],{"class":1116},[1050,12995,2464],{"class":1071},[1050,12997,12999],{"class":1052,"line":12998},434,[1050,13000,2118],{"class":1067},[1050,13002,13004,13006,13009,13011,13013,13015,13018],{"class":1052,"line":13003},435,[1050,13005,2426],{"class":1063},[1050,13007,13008],{"class":1067}," index_name",[1050,13010,1491],{"class":1071},[1050,13012,12781],{"class":1067},[1050,13014,2432],{"class":1063},[1050,13016,13017],{"class":1067}," sorted_indexes",[1050,13019,1919],{"class":1071},[1050,13021,13023,13025,13027,13029,13031,13033,13035,13037,13039,13041,13043,13045,13047,13049,13051,13053,13055,13057,13059,13061,13063,13065,13068],{"class":1052,"line":13022},436,[1050,13024,2234],{"class":1089},[1050,13026,1072],{"class":1071},[1050,13028,6360],{"class":1075},[1050,13030,1072],{"class":1071},[1050,13032,6365],{"class":1979},[1050,13034,1952],{"class":1071},[1050,13036,6711],{"class":1199},[1050,13038,11831],{"class":1106},[1050,13040,1234],{"class":1186},[1050,13042,8874],{"class":1979},[1050,13044,1203],{"class":1186},[1050,13046,11855],{"class":1106},[1050,13048,1234],{"class":1186},[1050,13050,4418],{"class":1979},[1050,13052,1274],{"class":1071},[1050,13054,1110],{"class":1102},[1050,13056,12967],{"class":1106},[1050,13058,1110],{"class":1102},[1050,13060,2282],{"class":1071},[1050,13062,12873],{"class":1199},[1050,13064,1203],{"class":1186},[1050,13066,13067],{"class":1106}," scans\"",[1050,13069,1991],{"class":1071},[1026,13071,13072],{},"Database instrumentation provides the visibility needed to maintain optimal performance as your application scales. By implementing comprehensive monitoring, logging, and alerting systems, you can proactively identify and resolve performance issues before they impact users.",[1225,13074,13075],{},"html pre.shiki code .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .s3h35, html code.shiki .s3h35{--shiki-light:#F76D47;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sD-vU, html code.shiki .sD-vU{--shiki-light:#E2931D;--shiki-default:#2E8F82;--shiki-dark:#5DA994}html pre.shiki code .sm7ve, html code.shiki .sm7ve{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#B5695977;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D77;--shiki-dark-font-style:inherit}html pre.shiki code .sVyVU, html code.shiki .sVyVU{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B56959;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D;--shiki-dark-font-style:inherit}html pre.shiki code .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sRjD_, html code.shiki .sRjD_{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sCyAa, html code.shiki .sCyAa{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .s27EL, html code.shiki .s27EL{--shiki-light:#91B859;--shiki-default:#AB5E3F;--shiki-dark:#C4704F}html pre.shiki code .sETVe, html code.shiki .sETVe{--shiki-light:#39ADB5;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sz9Cv, html code.shiki .sz9Cv{--shiki-light:#91B859;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sGuSu, html code.shiki .sGuSu{--shiki-light:#39ADB5;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .sRJPX, html code.shiki .sRJPX{--shiki-light:#91B859;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sk0MF, html code.shiki .sk0MF{--shiki-light:#90A4AE;--shiki-default:#BDA437;--shiki-dark:#E6CC77}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sFGJz, html code.shiki .sFGJz{--shiki-light:#E53935;--shiki-default:#A65E2B;--shiki-dark:#C99076}",{"title":1045,"searchDepth":1053,"depth":1060,"links":13077},[13078,13082],{"id":1032,"depth":1060,"text":1033,"children":13079},[13080,13081],{"id":1037,"depth":1079,"text":1038},{"id":4443,"depth":1079,"text":4444},{"id":6864,"depth":1060,"text":6865,"children":13083},[13084],{"id":6868,"depth":1079,"text":6869},"md",null,{},{"title":316,"description":1028},"kIZNpcSWuEiC5DgQfS1E6KZjIWRtFMfNMPUMPpMp0LU",[13091,13093],{"title":312,"path":313,"stem":314,"description":13092,"children":-1},"Composite primary keys (also called compound keys) consist of multiple columns that together uniquely identify a record. While Django traditionally uses single-column auto-incrementing primary keys, Django 4.2+ provides experimental support for composite primary keys.",{"title":320,"path":321,"stem":322,"description":13094,"children":-1},"Database optimization is crucial for building scalable Django applications. Understanding how to identify performance bottlenecks, optimize queries, and implement efficient database patterns ensures your application can handle growth and maintain responsiveness.",1772474921164]