filter_var(env('OPERATIONS_REPLICA_ENABLED', false), FILTER_VALIDATE_BOOL), 'allowed_scopes' => array_values(array_filter(array_map( 'trim', explode(',', (string) env('OPERATIONS_REPLICA_ALLOWED_SCOPES', '')) ))), 'connection' => [ 'host' => env('DB_OPERATIONS_REPLICA_HOST'), 'port' => (int) env('DB_OPERATIONS_REPLICA_PORT', 1433), 'database' => env('DB_OPERATIONS_REPLICA_DATABASE'), 'username' => env('DB_OPERATIONS_REPLICA_USERNAME'), 'password' => env('DB_OPERATIONS_REPLICA_PASSWORD'), 'odbc_driver' => env( 'DB_OPERATIONS_REPLICA_ODBC_DRIVER', PHP_OS_FAMILY === 'Windows' ? 'ODBC Driver 18 for SQL Server' : 'FreeTDS' ), 'tds_version' => env('DB_OPERATIONS_REPLICA_TDS_VERSION', '7.4'), // 旧 SQL Server 的可选 TLS 预登录不稳定;仅本地开发默认关闭协商。 'encryption' => env( 'DB_OPERATIONS_REPLICA_ENCRYPTION', env('APP_ENV', 'production') === 'production' ? 'request' : 'off' ), 'connect_timeout' => (int) env('DB_OPERATIONS_REPLICA_CONNECT_TIMEOUT', 5), 'query_timeout' => (int) env('DB_OPERATIONS_REPLICA_QUERY_TIMEOUT', 15), // 仅部分 ODBC 驱动支持该提示;它不是权限控制,默认不强行开启。 'application_intent' => env('DB_OPERATIONS_REPLICA_APPLICATION_INTENT', ''), ], 'snapshots' => [ 'ttl_seconds' => (int) env('OPERATIONS_REPLICA_SNAPSHOT_TTL', 120), 'summary_ttl_seconds' => (int) env('OPERATIONS_REPLICA_SUMMARY_TTL', 120), 'options_ttl_seconds' => (int) env('OPERATIONS_REPLICA_OPTIONS_TTL', 3600), 'stale_ttl_seconds' => (int) env('OPERATIONS_REPLICA_STALE_TTL', 86400), 'active_ttl_seconds' => (int) env('OPERATIONS_REPLICA_ACTIVE_QUERY_TTL', 21600), 'registry_limit' => (int) env('OPERATIONS_REPLICA_ACTIVE_QUERY_LIMIT', 300), 'refresh_limit' => (int) env('OPERATIONS_REPLICA_REFRESH_LIMIT', 2), 'miss_budget_per_window' => (int) env('OPERATIONS_REPLICA_MISS_BUDGET', 6), 'budget_window_seconds' => (int) env('OPERATIONS_REPLICA_BUDGET_WINDOW', 60), 'lock_seconds' => (int) env('OPERATIONS_REPLICA_LOCK_SECONDS', 45), 'lock_wait_seconds' => (int) env('OPERATIONS_REPLICA_LOCK_WAIT', 3), 'max_concurrency' => (int) env('OPERATIONS_REPLICA_MAX_CONCURRENCY', 2), 'slot_wait_ms' => (int) env('OPERATIONS_REPLICA_SLOT_WAIT_MS', 1500), 'failure_cooldown_seconds' => (int) env('OPERATIONS_REPLICA_FAILURE_COOLDOWN', 300), 'query_failure_cooldown_seconds' => (int) env('OPERATIONS_REPLICA_QUERY_FAILURE_COOLDOWN', 300), 'slow_query_ms' => (int) env('OPERATIONS_REPLICA_SLOW_QUERY_MS', 5000), 'slow_query_cooldown_seconds' => (int) env('OPERATIONS_REPLICA_SLOW_QUERY_COOLDOWN', 300), 'refresh_time_budget_seconds' => (int) env('OPERATIONS_REPLICA_REFRESH_TIME_BUDGET', 45), 'refresh_pause_ms' => (int) env('OPERATIONS_REPLICA_REFRESH_PAUSE_MS', 300), ], ];