# Size-Based Retention Limit stream size by keeping only the last N events. ## Configuration ```csharp var policy = new RetentionPolicyConfig { StreamName = "analytics", MaxEventCount = 1_000_000, // Keep last 1 million events Enabled = true }; await _policyStore.SetPolicyAsync(policy); ``` ## Use Cases | Stream Type | Max Events | Reason | |-------------|------------|---------| | **Hot Analytics** | 100k-1M | Recent data only | | **Sliding Window** | 10k-100k | Last N transactions | | **Debug Logs** | 50k-500k | Recent errors | | **Metrics** | 1M-10M | Time-series data | ## SQL Implementation ```sql CREATE OR REPLACE FUNCTION apply_size_retention( p_stream_name TEXT, p_max_event_count INTEGER ) RETURNS INTEGER AS $$ DECLARE deleted_count INTEGER; BEGIN DELETE FROM events WHERE stream_name = p_stream_name AND offset < ( SELECT MAX(offset) - p_max_event_count FROM events WHERE stream_name = p_stream_name ); GET DIAGNOSTICS deleted_count = ROW_COUNT; RETURN deleted_count; END; $$ LANGUAGE plpgsql; ``` ## See Also - [Retention Policies Overview](README.md) - [Time-Based Retention](time-based-retention.md)