# MongoDB Performance<br />ch3 Index Operations ###### tags: `MongoDB University M201` ## Building Indexes * Foreground indexes are fase, but block operations * Background indexes are slow, but don't block operations :::warning For feature compatibility version (fcv) =="4.2", all index builds use an optimized build process== that holds the exclusive lock only at the beginning and end of the build process. The rest of the build process yields to interleaving read and write operations. **MongoDB ignores the background option if specified.** ::: * currentOp() * killOp(<opid>) ## Understanding Explain Using explain is best way to analyze what heppen when the query executed even without the query being executed. ```javascript= db.<collection>.explain('<argument>') ``` #### argument * queryPlanner (default) * not actual executed * executionStats * actual executed * allPlansExecution * actual executed Sort_key_generator: in memory sort If a sort uses more than 32 mb, then the server is going to cancel that query ## Hint() To select the index to query manually ```javascript= db.people.find( { name: 'John Doe', zipCode: { $gt: '63000' } } ).hint ( 'index_name' ) ``` ## Resource Allocation for Indexes * Determine Index Size * Resource Allocation * Edge Case ### Determine Index Size * db.stats() * db.<collection>.stats() ### Resource Allocation * Disk * Memory (RAM) ```javascript= // get memory size in cache let stats = db.<collection>.stats({1'indexDetail: true'}) stats.indexDetails.endstation_name_1.cache ``` ### Edge Case * Occasional Reports * Right-end-side index increments ## Basic Benchmarking Types of Performance Benchmarking * Public test suite * Specific or Private Testing environment Low Level Benchmarking * File I/O Performance * Scheduler Performance * Memory allocation and transfer speed * Thread performance * Database server performance * Translation Isolation * ... Database server Benchmarking * Data set load * Writes per second * Reads per second * Balanced work loads * Read/Write ratio Distributed Systems Benchmarking * Linearization * Serialization * Fault tolerance