Complete configuration reference for Qdrant including storage, performance, networking, and optimization settings
Qdrant can be configured through YAML configuration files, environment variables, or command-line arguments. This guide covers all available configuration options.
log_level: INFOlogger: # Logging format: text or json format: text # Optional: log to disk on_disk: enabled: true log_file: /var/log/qdrant/qdrant.log log_level: INFO format: text buffer_size_bytes: 1024
storage: # Where to store all vector data and indexes storage_path: ./storage # Where to store collection snapshots snapshots_path: ./snapshots # Where to store temporary files # If null, uses: storage/snapshots_temp/ temp_path: null
storage: # Store payloads on disk instead of in memory # Saves RAM at the cost of slightly slower retrieval # Indexed payloads remain in memory on_disk_payload: true
Setting on_disk_payload: true significantly reduces memory usage for large datasets with substantial payload data.
storage: wal: # Size of a single WAL segment in megabytes wal_capacity_mb: 32 # Number of WAL segments to pre-allocate # Higher values reduce latency spikes during segment creation wal_segments_ahead: 0
storage: performance: # Number of threads for search operations # 0 = auto-detect based on CPU cores max_search_threads: 0 # CPU budget for optimization jobs # 0 = auto (leave 1+ CPUs free) # Negative = subtract from available CPUs # Positive = use exact number of CPUs optimizer_cpu_budget: 0
storage: optimizers: # Minimum fraction of deleted vectors to trigger optimization deleted_threshold: 0.2 # Minimum vectors in segment to allow optimization vacuum_min_vector_number: 1000 # Target number of segments # 0 = auto-select based on CPU count default_segment_number: 0 # Maximum segment size in kilobytes # null = auto-select based on CPU count # 1KB = 1 vector of size 256 max_segment_size_kb: null # Threshold for creating vector index (in KB) # Vectors below this size use plain index # 0 = disable indexing entirely indexing_threshold_kb: 10000 # Interval between forced flushes (seconds) flush_interval_sec: 5 # Max optimization threads per shard # null = dynamic, saturate CPU # 0 = disable optimizations max_optimization_threads: null
Tuning Tips:
Lower max_segment_size_kb for faster indexing
Higher max_segment_size_kb for better search performance
Increase default_segment_number for better parallelization
storage: hnsw_index: # Number of edges per node # Higher = more accurate, more memory m: 16 # Neighbors to consider during index build # Higher = more accurate, slower build ef_construct: 100 # Size threshold for full-scan vs HNSW (in KB) # Below this threshold, use full-scan for better performance full_scan_threshold_kb: 10000 # Threads for background index building # 0 = auto-select # Keep between 8-16 for optimal HNSW graphs max_indexing_threads: 0 # Store HNSW index on disk instead of RAM on_disk: false # Custom M param for payload indexes # null = use default M payload_m: null
service: # Host to bind (0.0.0.0 = all interfaces) host: 0.0.0.0 # HTTP API port http_port: 6333 # gRPC port (null = disabled) grpc_port: 6334 # Enable CORS for browser access enable_cors: true # Maximum POST request size in megabytes max_request_size_mb: 32 # Number of API worker threads # 0 = number of CPU cores max_workers: 0
tls: # Server certificate chain cert: ./tls/cert.pem # Server private key key: ./tls/key.pem # CA certificate for peer verification ca_cert: ./tls/cacert.pem # Certificate reload TTL in seconds # null = no automatic reload # Only works for HTTPS, not gRPC cert_ttl: 3600