From 633903b9f8c2820e886bb25759488a0b33298f10 Mon Sep 17 00:00:00 2001 From: Kim Date: Mon, 28 Jul 2025 19:13:52 -0700 Subject: [PATCH] Added new QS to test Gen2WH with a prescripted python based test harness in a Snowflake Notebook --- .../assets/import_snowflake_notebook.png | Bin 0 -> 38522 bytes .../gen2-warehouse-performance-comparison.md | 246 ++++++++++++++++++ 2 files changed, 246 insertions(+) create mode 100644 site/sfguides/src/gen2-warehouse-performance-comparison/assets/import_snowflake_notebook.png create mode 100644 site/sfguides/src/gen2-warehouse-performance-comparison/gen2-warehouse-performance-comparison.md diff --git a/site/sfguides/src/gen2-warehouse-performance-comparison/assets/import_snowflake_notebook.png b/site/sfguides/src/gen2-warehouse-performance-comparison/assets/import_snowflake_notebook.png new file mode 100644 index 0000000000000000000000000000000000000000..4e41c8691df9acbc370d96acbe06103b0e8ee66f GIT binary patch literal 38522 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 +## Overview +Duration: 3 + +This comprehensive quickstart will guide you through setting up and executing a rigorous performance comparison between Snowflake's Gen1 and Gen2 warehouses using TPC-H benchmark queries with a robust Python testing framework. + +### What You'll Learn +- How to obtain and set up TPC-H sample data from Snowflake Marketplace +- How to create Gen1 and Gen2 warehouses with proper configurations +- Critical procedures for cache invalidation to ensure fair performance testing +- How to deploy and use a comprehensive Python-based TPC-H benchmark framework +- How to execute single, light, medium, and heavy load tests +- How to run both threaded and async load tests with configurable concurrency +- How to analyze and interpret performance results using SQL queries +- How to make data-driven decisions about warehouse optimization + +### What You'll Need +- A Snowflake account with ACCOUNTADMIN or sufficient privileges to create warehouses +- Access to Snowflake Marketplace to obtain sample data +- A Snowflake Notebook environment OR Python environment with Snowpark +- Basic understanding of SQL and Python + +### What You'll Build +- Three test warehouses (Gen1 Small, Gen2 Small, Gen2 XSmall) +- A comprehensive Python-based TPC-H benchmark testing framework +- Automated load testing capabilities with configurable concurrency levels +- Performance comparison dashboards and analysis queries +- Cache invalidation and session management utilities + +## Prerequisites and Setup +Duration: 10 + +Before starting the performance comparison, ensure you have the necessary permissions and access. + +### Required Permissions +You'll need the following privileges: +- `ACCOUNTADMIN` role or sufficient privileges to: + - Create warehouses (`CREATE WAREHOUSE` privilege) + - Import data from Snowflake Marketplace + - Access and query sample datasets + - Manage session parameters + +### Technical Requirements +- Snowflake account (trial accounts work fine) +- Snowflake Notebook environment (recommended) OR +- External Python environment with Snowpark installed + +### Get TPC-H Sample Data from Marketplace + +The TPC-H sample dataset is essential for this benchmark. Here's how to obtain it: + +#### Method 1: Using Snowsight Web Interface (Recommended) + +1. **Navigate to Marketplace**: + - Log into your Snowflake account via Snowsight + - Click on "Data" in the left navigation panel + - Select "Marketplace" from the dropdown + +2. **Search for Sample Data**: + - In the marketplace search bar, type "Sample Data" + - Look for "Sample Data" provided by Snowflake Inc. + - Click on the "Sample Data" listing + +3. **Get the Dataset**: + - Click the "Get" button + - Review and accept the terms and conditions + - The data will be automatically available as `SNOWFLAKE_SAMPLE_DATA` database + +#### Method 2: Verify Existing Access + +```sql +-- Check if sample data is already available in your account +SHOW DATABASES LIKE 'SNOWFLAKE_SAMPLE_DATA'; + +-- If available, verify access to TPC-H schema +USE DATABASE SNOWFLAKE_SAMPLE_DATA; +SHOW SCHEMAS LIKE 'TPCH%'; +``` + +#### Create Test Warehouses +Duration: 5 + +Create three warehouses for comprehensive performance comparison: one Gen1 warehouse and two Gen2 warehouses of different sizes. + +#### Understanding Warehouse Generations +- Gen1 (STANDARD_GEN_1): Original Snowflake warehouse architecture +- Gen2 (STANDARD_GEN_2): Enhanced architecture with improved performance and resource utilization + +#### Create the Test Warehouses +Execute these SQL commands to create your test warehouses: + +```sql +-- Gen1 Small Warehouse for baseline comparison +CREATE OR REPLACE WAREHOUSE POC_GEN1_S +WAREHOUSE_SIZE = SMALL +AUTO_RESUME = TRUE +AUTO_SUSPEND = 60 +INITIALLY_SUSPENDED = TRUE +RESOURCE_CONSTRAINT = STANDARD_GEN_1 +COMMENT = 'Gen1 Small POC Warehouse for Performance Testing'; + +-- Gen2 Small Warehouse for direct size comparison +CREATE OR REPLACE WAREHOUSE POC_GEN2_S +WAREHOUSE_SIZE = SMALL +AUTO_RESUME = TRUE +AUTO_SUSPEND = 60 +INITIALLY_SUSPENDED = TRUE +RESOURCE_CONSTRAINT = STANDARD_GEN_2 +COMMENT = 'Gen2 Small POC Warehouse for Performance Testing'; + +-- Gen2 XSmall Warehouse for cost-efficiency comparison +CREATE OR REPLACE WAREHOUSE POC_GEN2_XS +WAREHOUSE_SIZE = XSMALL +AUTO_RESUME = TRUE +AUTO_SUSPEND = 60 +INITIALLY_SUSPENDED = TRUE +RESOURCE_CONSTRAINT = STANDARD_GEN_2 +COMMENT = 'Gen2 XSmall POC Warehouse for Cost-Efficiency Testing'; + +``` +#### Verify Warehouse Creation +```sql +-- Confirm all warehouses were created successfully +SHOW WAREHOUSES LIKE 'POC_%'; + +-- Check warehouse specifications +SELECT + "name", + "size", + "resource_constraint", + "auto_suspend", + "auto_resume", + "state", + "comment" +FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())); +``` + +You should see three warehouses with the following configurations: +- POC_GEN1_S: Small, Gen1, Auto-suspend 60s +- POC_GEN2_S: Small, Gen2, Auto-suspend 60s +- POC_GEN2_XS: XSmall, Gen2, Auto-suspend 60s + + +#### Understanding Cache Invalidation +Duration: 8 + +#### Critical Concept: For accurate performance comparisons, both warehouse cache and result cache must be invalidated before each test run. This section explains why and how. + +#### Types of Caching in Snowflake + +1. Warehouse Cache (Local SSD Cache) + - What: Recently accessed data stored on the warehouse's local SSD + - Purpose: Speeds up repeated queries on the same data + - Impact on Testing: Can make subsequent runs artificially faster + - Invalidation: Suspend and resume the warehouse + +2. Result Cache + - What: Previously computed query results stored globally + - Purpose: Returns cached results for identical queries + - Impact on Testing: Can return cached results instead of executing queries + - Invalidation: Disable at session level with USE_CACHED_RESULT = FALSE + +#### Why Cache Invalidation Matters +Without proper cache invalidation: + +- Inconsistent Results: First run slow, subsequent runs artificially fast +- Unfair Comparisons: Different warehouses may benefit differently from cached data +- Misleading Metrics: Performance improvements may be due to caching, not warehouse efficiency + +#### Cache Invalidation Procedures +#### Warehouse Cache Invalidation +```sql +-- Suspend the warehouse to clear local SSD cache +ALTER WAREHOUSE SUSPEND; + +-- Resume the warehouse with clean cache +ALTER WAREHOUSE RESUME; + +-- Brief pause to ensure warehouse is ready +SELECT SYSTEM$WAIT(3); +``` + +#### Result Cache Invalidation +```sql +-- Disable result cache for the current session +ALTER SESSION SET USE_CACHED_RESULT = FALSE; + +-- Verify the setting +SHOW PARAMETERS LIKE 'USE_CACHED_RESULT' IN SESSION; +``` +#### Query Tagging for Analysis +```sql +-- Set a query tag to identify test queries in query history +ALTER SESSION SET QUERY_TAG = 'POC_GEN2_PERFORMANCE_TEST'; + +-- Verify the tag is set +SHOW PARAMETERS LIKE 'QUERY_TAG' IN SESSION; +``` + +## Deploy the Python Testing Framework +Duration: 15 + +Now we'll deploy the comprehensive Python framework for TPC-H benchmarking. This framework includes cache management, load testing, and results analysis. + +### Framework Components +The testing framework includes: + +- TPC-H Query Suite: Industry-standard benchmark queries (Q1, Q3, Q6, Q10) +- Cache Management: Automated warehouse and result cache invalidation +- Load Testing Engine: Threaded execution with configurable concurrency +- Results Analysis: Comprehensive performance metrics and reporting +- Session Management: Proper query tagging and session configuration + +### Environment Setup +Create a new Snowflake Notebook. In this case, we will import a pre-created one that has codified all the steps described here. + + +1. Click on [this](https://github.com/sfc-gh-knjeru/snowflake-demo-notebooks/blob/kn-nb-branch/Gen2%20Warehouse%20Performance%20Comparison/Gen2WH_POC_Notebook.ipynb). Download the file by clicking on the `Download raw file` from the top right. + +2. Go to the Snowflake web interface, [Snowsight](https://app.snowflake.com), on your browser. + +3. Navigate to `Project` > `Notebooks` from the left menu bar. + +4. Import the .ipynb file you've download into your Snowflake Notebook by using the `Import from .ipynb` button located on the top right of the Notebooks page. + +![Import](assets/import_snowflake_notebook.png) + +5. Select the file from your local directory and press `Open`. + +6. A `Create Notebook` dialog will show up. Select a database, schema, and warehouse for the Notebook and click `Create`. + +## Run the Tests in the Notebook +Duration: 15 + +Now run the load tests as described in the Notebook and compare results. \ No newline at end of file