Module materialize.feature_benchmark.scenarios.scale

Expand source code Browse git
# Copyright Materialize, Inc. and contributors. All rights reserved.
#
# Use of this software is governed by the Business Source License
# included in the LICENSE file at the root of this repository.
#
# As of the Change Date specified in that file, in accordance with
# the Business Source License, use of this software will be governed
# by the Apache License, Version 2.0.

from textwrap import dedent

from materialize.feature_benchmark.measurement_source import MeasurementSource, Td
from materialize.feature_benchmark.scenario import Scenario


class SmallClusters(Scenario):
    """Materialized views across many small clusters."""

    SCALE = 1.5  # 32 clusters
    FIXED_SCALE = True

    def benchmark(self) -> MeasurementSource:
        create = "\n".join(
            dedent(
                f"""
                > DROP CLUSTER IF EXISTS cluster{i} CASCADE;

                > CREATE CLUSTER cluster{i} REPLICAS (r (SIZE '4-1'));

                > CREATE MATERIALIZED VIEW v{i}
                  IN CLUSTER cluster{i}
                  AS SELECT COUNT(*) FROM t1;

                > CREATE DEFAULT INDEX ON v{i}
                """
            )
            for i in range(self.n())
        )

        select = "\n".join(
            dedent(
                f"""
                > SET CLUSTER = cluster{i}
                > SELECT * FROM v{i}
                100000
                """
            )
            for i in range(self.n())
        )

        return Td(
            dedent(
                f"""
                > DROP TABLE IF EXISTS t1 CASCADE;
                > CREATE TABLE t1 (f1 INTEGER);

                $ postgres-execute connection=postgres://mz_system:materialize@${{testdrive.materialize-internal-sql-addr}}
                ALTER SYSTEM SET max_clusters = {self.n() + 2};
                """
            )
            + create
            + dedent(
                """
                > INSERT INTO t1
                  SELECT * FROM generate_series(1, 100000)
                  /* A */
                """
            )
            + select
            + dedent(
                """
                > SELECT 1
                  /* B */;
                1
                """
            )
        )

Classes

class SmallClusters (scale: float, mz_version: MzVersion, default_size: int, seed: int)

Materialized views across many small clusters.

Expand source code Browse git
class SmallClusters(Scenario):
    """Materialized views across many small clusters."""

    SCALE = 1.5  # 32 clusters
    FIXED_SCALE = True

    def benchmark(self) -> MeasurementSource:
        create = "\n".join(
            dedent(
                f"""
                > DROP CLUSTER IF EXISTS cluster{i} CASCADE;

                > CREATE CLUSTER cluster{i} REPLICAS (r (SIZE '4-1'));

                > CREATE MATERIALIZED VIEW v{i}
                  IN CLUSTER cluster{i}
                  AS SELECT COUNT(*) FROM t1;

                > CREATE DEFAULT INDEX ON v{i}
                """
            )
            for i in range(self.n())
        )

        select = "\n".join(
            dedent(
                f"""
                > SET CLUSTER = cluster{i}
                > SELECT * FROM v{i}
                100000
                """
            )
            for i in range(self.n())
        )

        return Td(
            dedent(
                f"""
                > DROP TABLE IF EXISTS t1 CASCADE;
                > CREATE TABLE t1 (f1 INTEGER);

                $ postgres-execute connection=postgres://mz_system:materialize@${{testdrive.materialize-internal-sql-addr}}
                ALTER SYSTEM SET max_clusters = {self.n() + 2};
                """
            )
            + create
            + dedent(
                """
                > INSERT INTO t1
                  SELECT * FROM generate_series(1, 100000)
                  /* A */
                """
            )
            + select
            + dedent(
                """
                > SELECT 1
                  /* B */;
                1
                """
            )
        )

Ancestors

Class variables

var FIXED_SCALE : bool
var SCALE : float

Methods

def benchmark(self) ‑> MeasurementSource
Expand source code Browse git
def benchmark(self) -> MeasurementSource:
    create = "\n".join(
        dedent(
            f"""
            > DROP CLUSTER IF EXISTS cluster{i} CASCADE;

            > CREATE CLUSTER cluster{i} REPLICAS (r (SIZE '4-1'));

            > CREATE MATERIALIZED VIEW v{i}
              IN CLUSTER cluster{i}
              AS SELECT COUNT(*) FROM t1;

            > CREATE DEFAULT INDEX ON v{i}
            """
        )
        for i in range(self.n())
    )

    select = "\n".join(
        dedent(
            f"""
            > SET CLUSTER = cluster{i}
            > SELECT * FROM v{i}
            100000
            """
        )
        for i in range(self.n())
    )

    return Td(
        dedent(
            f"""
            > DROP TABLE IF EXISTS t1 CASCADE;
            > CREATE TABLE t1 (f1 INTEGER);

            $ postgres-execute connection=postgres://mz_system:materialize@${{testdrive.materialize-internal-sql-addr}}
            ALTER SYSTEM SET max_clusters = {self.n() + 2};
            """
        )
        + create
        + dedent(
            """
            > INSERT INTO t1
              SELECT * FROM generate_series(1, 100000)
              /* A */
            """
        )
        + select
        + dedent(
            """
            > SELECT 1
              /* B */;
            1
            """
        )
    )

Inherited members