diff --git a/examples/tuning/mariadb_distributed/get_tpmc.sh b/examples/tuning/mariadb_distributed/get_tpmc.sh index e370d7271a27939f22adcc52730ee1179ba0564c..dc09c550a78f963b88cd5ce4f7aa75a7d7d16097 100644 --- a/examples/tuning/mariadb_distributed/get_tpmc.sh +++ b/examples/tuning/mariadb_distributed/get_tpmc.sh @@ -17,7 +17,7 @@ if [ ! -f "$LOG_FILE" ]; then fi # 获取本地文件内容 -local_value=$(cat PATH/mariadb_tpmc.out) +local_value=$(cat PATH/tpcc/mariadb_tpmc.out) # 检查远程文件是否存在并获取内容 ssh -q root@CLIENT_IP_2 'sleep 1' diff --git "a/examples/tuning/mariadb_distributed/mariadb\350\260\203\344\274\230\346\214\207\345\257\274\346\226\207\346\241\243.md" "b/examples/tuning/mariadb_distributed/mariadb\350\260\203\344\274\230\346\214\207\345\257\274\346\226\207\346\241\243.md" index 619f6c345018ba7898383ca69d621764db5d7df7..781aa75d969563ba0a99ab22d6754c64aecb3ef7 100644 --- "a/examples/tuning/mariadb_distributed/mariadb\350\260\203\344\274\230\346\214\207\345\257\274\346\226\207\346\241\243.md" +++ "b/examples/tuning/mariadb_distributed/mariadb\350\260\203\344\274\230\346\214\207\345\257\274\346\226\207\346\241\243.md" @@ -229,7 +229,7 @@ Best Performance: (tpmc=396916.00), Performance Improvement Rate: 3.95% atune-adm tuning --restore --project mariadb ``` # 3.主要文件功能介绍 -## set_mariadb_param_info.sh +## get_mariadb_param_info.sh 该脚本在mariadb_server.yaml中使用,获取测试机1中mariadb相关的参数值,用来进行本地调优。(因为两台测试机硬件规格和环境比较相似,因此用使用第一个测试机的数据来进行调优即可) 如果需要扩展为不同机器的mariadb下发参数不同,可以扩展该脚本为两个参数,指定IP和参数名,用于给对应机器的参数进行下发。 ```bash diff --git a/examples/tuning/postgresql/README b/examples/tuning/postgresql/README new file mode 100644 index 0000000000000000000000000000000000000000..86ae46be9fce91cfb797d793756c8930a83e6ac4 --- /dev/null +++ b/examples/tuning/postgresql/README @@ -0,0 +1,6 @@ +1. Prepare the environment, and ip needs to be transmitted for the script +sh prepare.sh +2. Start to tuning +atune-adm tuning --project postgresql --detail postgresql_sysbench_client.yaml +3. Restore the environment +atune-adm tuning --restore --project postgresql diff --git a/examples/tuning/postgresql/get_eval.sh b/examples/tuning/postgresql/get_eval.sh new file mode 100644 index 0000000000000000000000000000000000000000..b5857b616c566c7296b7491e8714a49565adf66b --- /dev/null +++ b/examples/tuning/postgresql/get_eval.sh @@ -0,0 +1,11 @@ +#!/bin/bash +i=1 +while [ $i -lt 10 ] +do + sleep $i + if [ -f "PATH/sysbench_oltp_read_write.log" ] && [ -n "$(cat PATH/sysbench_oltp_read_write.log | grep 'queries:' | awk -F '(' '{print $2}' | awk -F ' ' '{print $1}')" ]; then + cat PATH/sysbench_oltp_read_write.log | grep 'queries:' | awk -F '(' '{print $2}' | awk -F ' ' '{print $1}' + break + fi + i=$((i+1)) +done diff --git a/examples/tuning/postgresql/get_postgresql_param_info.sh b/examples/tuning/postgresql/get_postgresql_param_info.sh new file mode 100644 index 0000000000000000000000000000000000000000..b316093eaa07992e14ec0b1fbfc16ef700ca7464 --- /dev/null +++ b/examples/tuning/postgresql/get_postgresql_param_info.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# 检查是否传入参数 +if [ -z "$1" ]; then + echo "请提供一个参数" + exit 1 +fi + +# 获取传入的参数 +param=$1 + +cat /var/lib/pgsql/data/postgresql.conf | grep '^$param' | awk -F '=' '{print \$2}' \ No newline at end of file diff --git a/examples/tuning/postgresql/get_system_param_info.sh b/examples/tuning/postgresql/get_system_param_info.sh new file mode 100644 index 0000000000000000000000000000000000000000..a00f1919e173c3812188c017c35853dc3e56d9ac --- /dev/null +++ b/examples/tuning/postgresql/get_system_param_info.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# 检查是否传入参数 +if [ -z "$1" ]; then + echo "请提供一个参数" + exit 1 +fi + +# 获取传入的系统参数名称 +PARAM=$1 + +# 执行 sysctl 命令获取远程物理机的系统参数值 +ssh -q root@SERVER_IP "sysctl -n $PARAM" diff --git a/examples/tuning/postgresql/postgresql.conf b/examples/tuning/postgresql/postgresql.conf new file mode 100644 index 0000000000000000000000000000000000000000..74b806c90cb1f66e9909354719a67e02e76ff612 --- /dev/null +++ b/examples/tuning/postgresql/postgresql.conf @@ -0,0 +1,808 @@ +# ----------------------------- +# PostgreSQL configuration file +# ----------------------------- +# +# This file consists of lines of the form: +# +# name = value +# +# (The "=" is optional.) Whitespace may be used. Comments are introduced with +# "#" anywhere on a line. The complete list of parameter names and allowed +# values can be found in the PostgreSQL documentation. +# +# The commented-out settings shown in this file represent the default values. +# Re-commenting a setting is NOT sufficient to revert it to the default value; +# you need to reload the server. +# +# This file is read on server startup and when the server receives a SIGHUP +# signal. If you edit the file on a running system, you have to SIGHUP the +# server for the changes to take effect, run "pg_ctl reload", or execute +# "SELECT pg_reload_conf()". Some parameters, which are marked below, +# require a server shutdown and restart to take effect. +# +# Any parameter can also be given as a command-line option to the server, e.g., +# "postgres -c log_connections=on". Some parameters can be changed at run time +# with the "SET" SQL command. +# +# Memory units: B = bytes Time units: us = microseconds +# kB = kilobytes ms = milliseconds +# MB = megabytes s = seconds +# GB = gigabytes min = minutes +# TB = terabytes h = hours +# d = days + + +#------------------------------------------------------------------------------ +# FILE LOCATIONS +#------------------------------------------------------------------------------ + +# The default values of these variables are driven from the -D command-line +# option or PGDATA environment variable, represented here as ConfigDir. + +#data_directory = 'ConfigDir' # use data in another directory + # (change requires restart) +#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file + # (change requires restart) +#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file + # (change requires restart) + +# If external_pid_file is not explicitly set, no extra PID file is written. +#external_pid_file = '' # write an extra PID file + # (change requires restart) + + +#------------------------------------------------------------------------------ +# CONNECTIONS AND AUTHENTICATION +#------------------------------------------------------------------------------ + +# - Connection Settings - + +listen_addresses = '*' # what IP address(es) to listen on; + # comma-separated list of addresses; + # defaults to 'localhost'; use '*' for all + # (change requires restart) +port = 5432 # (change requires restart) +max_connections = 100 # (change requires restart) +#superuser_reserved_connections = 3 # (change requires restart) +#unix_socket_directories = '/var/run/postgresql, /tmp' # comma-separated list of directories + # (change requires restart) +#unix_socket_group = '' # (change requires restart) +#unix_socket_permissions = 0777 # begin with 0 to use octal notation + # (change requires restart) +#bonjour = off # advertise server via Bonjour + # (change requires restart) +#bonjour_name = '' # defaults to the computer name + # (change requires restart) + +# - TCP settings - +# see "man tcp" for details + +#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds; + # 0 selects the system default +#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds; + # 0 selects the system default +#tcp_keepalives_count = 0 # TCP_KEEPCNT; + # 0 selects the system default +#tcp_user_timeout = 0 # TCP_USER_TIMEOUT, in milliseconds; + # 0 selects the system default + +#client_connection_check_interval = 0 # time between checks for client + # disconnection while running queries; + # 0 for never + +# - Authentication - + +#authentication_timeout = 1min # 1s-600s +#password_encryption = scram-sha-256 # scram-sha-256 or md5 +#db_user_namespace = off + +# GSSAPI using Kerberos +#krb_server_keyfile = 'FILE:${sysconfdir}/krb5.keytab' +#krb_caseins_users = off + +# - SSL - + +#ssl = off +#ssl_ca_file = '' +#ssl_cert_file = 'server.crt' +#ssl_crl_file = '' +#ssl_crl_dir = '' +#ssl_key_file = 'server.key' +#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers +#ssl_prefer_server_ciphers = on +#ssl_ecdh_curve = 'prime256v1' +#ssl_min_protocol_version = 'TLSv1.2' +#ssl_max_protocol_version = '' +#ssl_dh_params_file = '' +#ssl_passphrase_command = '' +#ssl_passphrase_command_supports_reload = off + + +#------------------------------------------------------------------------------ +# RESOURCE USAGE (except WAL) +#------------------------------------------------------------------------------ + +# - Memory - + +shared_buffers = 16384 + # (change requires restart) +#huge_pages = try # on, off, or try + # (change requires restart) +#huge_page_size = 0 # zero for system default + # (change requires restart) +#temp_buffers = 8MB # min 800kB +#max_prepared_transactions = 0 # zero disables the feature + # (change requires restart) +# Caution: it is not advisable to set max_prepared_transactions nonzero unless +# you actively intend to use prepared transactions. +work_mem = 4096 +#hash_mem_multiplier = 2.0 +maintenance_work_mem = 65536 +#max_stack_depth = 2MB # min 100kB +#shared_memory_type = mmap # the default is the first option + # supported by the operating system: + # mmap + # sysv + # windows + # (change requires restart) +dynamic_shared_memory_type = posix # the default is usually the first option + # supported by the operating system: + # posix + # sysv + # windows + # mmap + # (change requires restart) +#min_dynamic_shared_memory = 0MB # (change requires restart) + +# - Disk - + +#temp_file_limit = -1 # limits per-process temp file space + # in kilobytes, or -1 for no limit + +# - Kernel Resources - + +#max_files_per_process = 1000 # min 64 + # (change requires restart) + +# - Cost-Based Vacuum Delay - + +#vacuum_cost_delay = 0 # 0-100 milliseconds (0 disables) +#vacuum_cost_page_hit = 1 # 0-10000 credits +#vacuum_cost_page_miss = 2 # 0-10000 credits +#vacuum_cost_page_dirty = 20 # 0-10000 credits +#vacuum_cost_limit = 200 # 1-10000 credits + +# - Background Writer - + +#bgwriter_delay = 200ms # 10-10000ms between rounds +#bgwriter_lru_maxpages = 100 # max buffers written/round, 0 disables +#bgwriter_lru_multiplier = 2.0 # 0-10.0 multiplier on buffers scanned/round +#bgwriter_flush_after = 512kB # measured in pages, 0 disables + +# - Asynchronous Behavior - + +#backend_flush_after = 0 # measured in pages, 0 disables +effective_io_concurrency = 1 +#maintenance_io_concurrency = 10 # 1-1000; 0 disables prefetching +#max_worker_processes = 8 # (change requires restart) +max_parallel_workers = 8 +#parallel_leader_participation = on +#old_snapshot_threshold = -1 # 1min-60d; -1 disables; 0 is immediate + # (change requires restart) + + +#------------------------------------------------------------------------------ +# WRITE-AHEAD LOG +#------------------------------------------------------------------------------ + +# - Settings - + +#wal_level = replica # minimal, replica, or logical + # (change requires restart) +#fsync = on # flush data to disk for crash safety + # (turning this off can cause + # unrecoverable data corruption) +#synchronous_commit = on # synchronization level; + # off, local, remote_write, remote_apply, or on +#wal_sync_method = fsync # the default is the first option + # supported by the operating system: + # open_datasync + # fdatasync (default on Linux and FreeBSD) + # fsync + # fsync_writethrough + # open_sync +#full_page_writes = on # recover from partial page writes +#wal_log_hints = off # also do full page writes of non-critical updates + # (change requires restart) +#wal_compression = off # enables compression of full-page writes; + # off, pglz, lz4, zstd, or on +#wal_init_zero = on # zero-fill new WAL files +#wal_recycle = on # recycle WAL files +#wal_buffers = -1 + # (change requires restart) +#wal_writer_delay = 200ms # 1-10000 milliseconds +#wal_writer_flush_after = 1MB # measured in pages, 0 disables +#wal_skip_threshold = 2MB + +#commit_delay = 0 # range 0-100000, in microseconds +#commit_siblings = 5 # range 1-1000 + +# - Checkpoints - + +#checkpoint_timeout = 5min # range 30s-1d +#checkpoint_completion_target = 0.9 # checkpoint target duration, 0.0 - 1.0 +#checkpoint_flush_after = 256kB # measured in pages, 0 disables +#checkpoint_warning = 30s # 0 disables +max_wal_size = 1GB +min_wal_size = 80MB + +# - Prefetching during recovery - + +#recovery_prefetch = try # prefetch pages referenced in the WAL? +#wal_decode_buffer_size = 512kB # lookahead window used for prefetching + # (change requires restart) + +# - Archiving - + +#archive_mode = off # enables archiving; off, on, or always + # (change requires restart) +#archive_library = '' # library to use to archive a logfile segment + # (empty string indicates archive_command should + # be used) +#archive_command = '' # command to use to archive a logfile segment + # placeholders: %p = path of file to archive + # %f = file name only + # e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f' +#archive_timeout = 0 # force a logfile segment switch after this + # number of seconds; 0 disables + +# - Archive Recovery - + +# These are only used in recovery mode. + +#restore_command = '' # command to use to restore an archived logfile segment + # placeholders: %p = path of file to restore + # %f = file name only + # e.g. 'cp /mnt/server/archivedir/%f %p' +#archive_cleanup_command = '' # command to execute at every restartpoint +#recovery_end_command = '' # command to execute at completion of recovery + +# - Recovery Target - + +# Set these only when performing a targeted recovery. + +#recovery_target = '' # 'immediate' to end recovery as soon as a + # consistent state is reached + # (change requires restart) +#recovery_target_name = '' # the named restore point to which recovery will proceed + # (change requires restart) +#recovery_target_time = '' # the time stamp up to which recovery will proceed + # (change requires restart) +#recovery_target_xid = '' # the transaction ID up to which recovery will proceed + # (change requires restart) +#recovery_target_lsn = '' # the WAL LSN up to which recovery will proceed + # (change requires restart) +#recovery_target_inclusive = on # Specifies whether to stop: + # just after the specified recovery target (on) + # just before the recovery target (off) + # (change requires restart) +#recovery_target_timeline = 'latest' # 'current', 'latest', or timeline ID + # (change requires restart) +#recovery_target_action = 'pause' # 'pause', 'promote', 'shutdown' + # (change requires restart) + + +#------------------------------------------------------------------------------ +# REPLICATION +#------------------------------------------------------------------------------ + +# - Sending Servers - + +# Set these on the primary and on any standby that will send replication data. + +#max_wal_senders = 10 # max number of walsender processes + # (change requires restart) +#max_replication_slots = 10 # max number of replication slots + # (change requires restart) +#wal_keep_size = 0 # in megabytes; 0 disables +#max_slot_wal_keep_size = -1 # in megabytes; -1 disables +#wal_sender_timeout = 60s # in milliseconds; 0 disables +#track_commit_timestamp = off # collect timestamp of transaction commit + # (change requires restart) + +# - Primary Server - + +# These settings are ignored on a standby server. + +#synchronous_standby_names = '' # standby servers that provide sync rep + # method to choose sync standbys, number of sync standbys, + # and comma-separated list of application_name + # from standby(s); '*' = all +#vacuum_defer_cleanup_age = 0 # number of xacts by which cleanup is delayed + +# - Standby Servers - + +# These settings are ignored on a primary server. + +#primary_conninfo = '' # connection string to sending server +#primary_slot_name = '' # replication slot on sending server +#promote_trigger_file = '' # file name whose presence ends recovery +#hot_standby = on # "off" disallows queries during recovery + # (change requires restart) +#max_standby_archive_delay = 30s # max delay before canceling queries + # when reading WAL from archive; + # -1 allows indefinite delay +#max_standby_streaming_delay = 30s # max delay before canceling queries + # when reading streaming WAL; + # -1 allows indefinite delay +#wal_receiver_create_temp_slot = off # create temp slot if primary_slot_name + # is not set +#wal_receiver_status_interval = 10s # send replies at least this often + # 0 disables +#hot_standby_feedback = off # send info from standby to prevent + # query conflicts +#wal_receiver_timeout = 60s # time that receiver waits for + # communication from primary + # in milliseconds; 0 disables +#wal_retrieve_retry_interval = 5s # time to wait before retrying to + # retrieve WAL after a failed attempt +#recovery_min_apply_delay = 0 # minimum delay for applying changes during recovery + +# - Subscribers - + +# These settings are ignored on a publisher. + +#max_logical_replication_workers = 4 # taken from max_worker_processes + # (change requires restart) +#max_sync_workers_per_subscription = 2 # taken from max_logical_replication_workers + + +#------------------------------------------------------------------------------ +# QUERY TUNING +#------------------------------------------------------------------------------ + +# - Planner Method Configuration - + +#enable_async_append = on +#enable_bitmapscan = on +#enable_gathermerge = on +#enable_hashagg = on +#enable_hashjoin = on +#enable_incremental_sort = on +#enable_indexscan = on +#enable_indexonlyscan = on +#enable_material = on +#enable_memoize = on +#enable_mergejoin = on +#enable_nestloop = on +#enable_parallel_append = on +#enable_parallel_hash = on +#enable_partition_pruning = on +#enable_partitionwise_join = off +#enable_partitionwise_aggregate = off +#enable_seqscan = on +#enable_sort = on +#enable_tidscan = on + +# - Planner Cost Constants - + +#seq_page_cost = 1.0 # measured on an arbitrary scale +#random_page_cost = 4.0 # same scale as above +cpu_tuple_cost = 0.01 +cpu_index_tuple_cost = 0.005 +#cpu_operator_cost = 0.0025 # same scale as above +#parallel_setup_cost = 1000.0 # same scale as above +#parallel_tuple_cost = 0.1 # same scale as above +#min_parallel_table_scan_size = 8MB +#min_parallel_index_scan_size = 512kB +effective_cache_size = 524288 + +#jit_above_cost = 100000 # perform JIT compilation if available + # and query more expensive than this; + # -1 disables +#jit_inline_above_cost = 500000 # inline small functions if query is + # more expensive than this; -1 disables +#jit_optimize_above_cost = 500000 # use expensive JIT optimizations if + # query is more expensive than this; + # -1 disables + +# - Genetic Query Optimizer - + +#geqo = on +#geqo_threshold = 12 +#geqo_effort = 5 # range 1-10 +#geqo_pool_size = 0 # selects default based on effort +#geqo_generations = 0 # selects default based on effort +#geqo_selection_bias = 2.0 # range 1.5-2.0 +#geqo_seed = 0.0 # range 0.0-1.0 + +# - Other Planner Options - + +#default_statistics_target = 100 # range 1-10000 +#constraint_exclusion = partition # on, off, or partition +#cursor_tuple_fraction = 0.1 # range 0.0-1.0 +#from_collapse_limit = 8 +#jit = on # allow JIT compilation +#join_collapse_limit = 8 # 1 disables collapsing of explicit + # JOIN clauses +#plan_cache_mode = auto # auto, force_generic_plan or + # force_custom_plan +#recursive_worktable_factor = 10.0 # range 0.001-1000000 + + +#------------------------------------------------------------------------------ +# REPORTING AND LOGGING +#------------------------------------------------------------------------------ + +# - Where to Log - + +#log_destination = 'stderr' # Valid values are combinations of + # stderr, csvlog, jsonlog, syslog, and + # eventlog, depending on platform. + # csvlog and jsonlog require + # logging_collector to be on. + +# This is used when logging to stderr: +logging_collector = on # Enable capturing of stderr, jsonlog, + # and csvlog into log files. Required + # to be on for csvlogs and jsonlogs. + # (change requires restart) + +# These are only used if logging_collector is on: +#log_directory = 'log' # directory where log files are written, + # can be absolute or relative to PGDATA +log_filename = 'postgresql-%a.log' # log file name pattern, + # can include strftime() escapes +#log_file_mode = 0600 # creation mode for log files, + # begin with 0 to use octal notation +log_rotation_age = 1d # Automatic rotation of logfiles will + # happen after that time. 0 disables. +#log_rotation_size = 10MB # Automatic rotation of logfiles will + # happen after that much log output. + # 0 disables. +log_truncate_on_rotation = on # If on, an existing log file with the + # same name as the new log file will be + # truncated rather than appended to. + # But such truncation only occurs on + # time-driven rotation, not on restarts + # or size-driven rotation. Default is + # off, meaning append to existing files + # in all cases. + +# These are relevant when logging to syslog: +#syslog_facility = 'LOCAL0' +#syslog_ident = 'postgres' +#syslog_sequence_numbers = on +#syslog_split_messages = on + +# This is only relevant when logging to eventlog (Windows): +# (change requires restart) +#event_source = 'PostgreSQL' + +# - When to Log - + +#log_min_messages = warning # values in order of decreasing detail: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # info + # notice + # warning + # error + # log + # fatal + # panic + +#log_min_error_statement = error # values in order of decreasing detail: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # info + # notice + # warning + # error + # log + # fatal + # panic (effectively off) + +#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements + # and their durations, > 0 logs only + # statements running at least this number + # of milliseconds + +#log_min_duration_sample = -1 # -1 is disabled, 0 logs a sample of statements + # and their durations, > 0 logs only a sample of + # statements running at least this number + # of milliseconds; + # sample fraction is determined by log_statement_sample_rate + +#log_statement_sample_rate = 1.0 # fraction of logged statements exceeding + # log_min_duration_sample to be logged; + # 1.0 logs all such statements, 0.0 never logs + + +#log_transaction_sample_rate = 0.0 # fraction of transactions whose statements + # are logged regardless of their duration; 1.0 logs all + # statements from all transactions, 0.0 never logs + +#log_startup_progress_interval = 10s # Time between progress updates for + # long-running startup operations. + # 0 disables the feature, > 0 indicates + # the interval in milliseconds. + +# - What to Log - + +#debug_print_parse = off +#debug_print_rewritten = off +#debug_print_plan = off +#debug_pretty_print = on +#log_autovacuum_min_duration = 10min # log autovacuum activity; + # -1 disables, 0 logs all actions and + # their durations, > 0 logs only + # actions running at least this number + # of milliseconds. +#log_checkpoints = on +#log_connections = off +#log_disconnections = off +#log_duration = off +#log_error_verbosity = default # terse, default, or verbose messages +#log_hostname = off +#log_line_prefix = '%m [%p] ' # special values: + # %a = application name + # %u = user name + # %d = database name + # %r = remote host and port + # %h = remote host + # %b = backend type + # %p = process ID + # %P = process ID of parallel group leader + # %t = timestamp without milliseconds + # %m = timestamp with milliseconds + # %n = timestamp with milliseconds (as a Unix epoch) + # %Q = query ID (0 if none or not computed) + # %i = command tag + # %e = SQL state + # %c = session ID + # %l = session line number + # %s = session start timestamp + # %v = virtual transaction ID + # %x = transaction ID (0 if none) + # %q = stop here in non-session + # processes + # %% = '%' + # e.g. '<%u%%%d> ' +#log_lock_waits = off # log lock waits >= deadlock_timeout +#log_recovery_conflict_waits = off # log standby recovery conflict waits + # >= deadlock_timeout +#log_parameter_max_length = -1 # when logging statements, limit logged + # bind-parameter values to N bytes; + # -1 means print in full, 0 disables +#log_parameter_max_length_on_error = 0 # when logging an error, limit logged + # bind-parameter values to N bytes; + # -1 means print in full, 0 disables +#log_statement = 'none' # none, ddl, mod, all +#log_replication_commands = off +#log_temp_files = -1 # log temporary files equal or larger + # than the specified size in kilobytes; + # -1 disables, 0 logs all temp files +log_timezone = 'Asia/Shanghai' + + +#------------------------------------------------------------------------------ +# PROCESS TITLE +#------------------------------------------------------------------------------ + +#cluster_name = '' # added to process titles if nonempty + # (change requires restart) +#update_process_title = on + + +#------------------------------------------------------------------------------ +# STATISTICS +#------------------------------------------------------------------------------ + +# - Cumulative Query and Index Statistics - + +#track_activities = on +#track_activity_query_size = 1024 # (change requires restart) +#track_counts = on +#track_io_timing = off +#track_wal_io_timing = off +#track_functions = none # none, pl, all +#stats_fetch_consistency = cache + + +# - Monitoring - + +#compute_query_id = auto +#log_statement_stats = off +#log_parser_stats = off +#log_planner_stats = off +#log_executor_stats = off + + +#------------------------------------------------------------------------------ +# AUTOVACUUM +#------------------------------------------------------------------------------ + +#autovacuum = on # Enable autovacuum subprocess? 'on' + # requires track_counts to also be on. +#autovacuum_max_workers = 3 # max number of autovacuum subprocesses + # (change requires restart) +#autovacuum_naptime = 1min # time between autovacuum runs +#autovacuum_vacuum_threshold = 50 # min number of row updates before + # vacuum +#autovacuum_vacuum_insert_threshold = 1000 # min number of row inserts + # before vacuum; -1 disables insert + # vacuums +#autovacuum_analyze_threshold = 50 # min number of row updates before + # analyze +#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum +#autovacuum_vacuum_insert_scale_factor = 0.2 # fraction of inserts over table + # size before insert vacuum +#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze +#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum + # (change requires restart) +#autovacuum_multixact_freeze_max_age = 400000000 # maximum multixact age + # before forced vacuum + # (change requires restart) +#autovacuum_vacuum_cost_delay = 2ms # default vacuum cost delay for + # autovacuum, in milliseconds; + # -1 means use vacuum_cost_delay +#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for + # autovacuum, -1 means use + # vacuum_cost_limit + + +#------------------------------------------------------------------------------ +# CLIENT CONNECTION DEFAULTS +#------------------------------------------------------------------------------ + +# - Statement Behavior - + +#client_min_messages = notice # values in order of decreasing detail: + # debug5 + # debug4 + # debug3 + # debug2 + # debug1 + # log + # notice + # warning + # error +#search_path = '"$user", public' # schema names +#row_security = on +#default_table_access_method = 'heap' +#default_tablespace = '' # a tablespace name, '' uses the default +#default_toast_compression = 'pglz' # 'pglz' or 'lz4' +#temp_tablespaces = '' # a list of tablespace names, '' uses + # only default tablespace +#check_function_bodies = on +#default_transaction_isolation = 'read committed' +#default_transaction_read_only = off +#default_transaction_deferrable = off +#session_replication_role = 'origin' +#statement_timeout = 0 # in milliseconds, 0 is disabled +#lock_timeout = 0 # in milliseconds, 0 is disabled +#idle_in_transaction_session_timeout = 0 # in milliseconds, 0 is disabled +#idle_session_timeout = 0 # in milliseconds, 0 is disabled +#vacuum_freeze_table_age = 150000000 +#vacuum_freeze_min_age = 50000000 +#vacuum_failsafe_age = 1600000000 +#vacuum_multixact_freeze_table_age = 150000000 +#vacuum_multixact_freeze_min_age = 5000000 +#vacuum_multixact_failsafe_age = 1600000000 +#bytea_output = 'hex' # hex, escape +#xmlbinary = 'base64' +#xmloption = 'content' +#gin_pending_list_limit = 4MB + +# - Locale and Formatting - + +datestyle = 'iso, ymd' +#intervalstyle = 'postgres' +timezone = 'Asia/Shanghai' +#timezone_abbreviations = 'Default' # Select the set of available time zone + # abbreviations. Currently, there are + # Default + # Australia (historical usage) + # India + # You can create your own file in + # share/timezonesets/. +#extra_float_digits = 1 # min -15, max 3; any value >0 actually + # selects precise output mode +#client_encoding = sql_ascii # actually, defaults to database + # encoding + +# These settings are initialized by initdb, but they can be changed. +lc_messages = 'zh_CN.UTF-8' # locale for system error message + # strings +lc_monetary = 'zh_CN.UTF-8' # locale for monetary formatting +lc_numeric = 'zh_CN.UTF-8' # locale for number formatting +lc_time = 'zh_CN.UTF-8' # locale for time formatting + +# default configuration for text search +default_text_search_config = 'pg_catalog.simple' + +# - Shared Library Preloading - + +#local_preload_libraries = '' +#session_preload_libraries = '' +#shared_preload_libraries = '' # (change requires restart) +#jit_provider = 'llvmjit' # JIT library to use + +# - Other Defaults - + +#dynamic_library_path = '$libdir' +#gin_fuzzy_search_limit = 0 + + +#------------------------------------------------------------------------------ +# LOCK MANAGEMENT +#------------------------------------------------------------------------------ + +#deadlock_timeout = 1s +#max_locks_per_transaction = 64 # min 10 + # (change requires restart) +#max_pred_locks_per_transaction = 64 # min 10 + # (change requires restart) +#max_pred_locks_per_relation = -2 # negative values mean + # (max_pred_locks_per_transaction + # / -max_pred_locks_per_relation) - 1 +#max_pred_locks_per_page = 2 # min 0 + + +#------------------------------------------------------------------------------ +# VERSION AND PLATFORM COMPATIBILITY +#------------------------------------------------------------------------------ + +# - Previous PostgreSQL Versions - + +#array_nulls = on +#backslash_quote = safe_encoding # on, off, or safe_encoding +#escape_string_warning = on +#lo_compat_privileges = off +#quote_all_identifiers = off +#standard_conforming_strings = on +#synchronize_seqscans = on + +# - Other Platforms and Clients - + +#transform_null_equals = off + + +#------------------------------------------------------------------------------ +# ERROR HANDLING +#------------------------------------------------------------------------------ + +#exit_on_error = off # terminate session on any error? +#restart_after_crash = on # reinitialize after backend crash? +#data_sync_retry = off # retry or panic on failure to fsync + # data? + # (change requires restart) +#recovery_init_sync_method = fsync # fsync, syncfs (Linux 5.8+) + + +#------------------------------------------------------------------------------ +# CONFIG FILE INCLUDES +#------------------------------------------------------------------------------ + +# These options allow settings to be loaded from files other than the +# default postgresql.conf. Note that these are directives, not variable +# assignments, so they can usefully be given more than once. + +#include_dir = '...' # include files ending in '.conf' from + # a directory, e.g., 'conf.d' +#include_if_exists = '...' # include file only if it exists +#include = '...' # include file + + +#------------------------------------------------------------------------------ +# CUSTOMIZED OPTIONS +#------------------------------------------------------------------------------ + +# Add settings for extensions here diff --git a/examples/tuning/postgresql/postgresql_sysbench_benchmark.sh b/examples/tuning/postgresql/postgresql_sysbench_benchmark.sh new file mode 100644 index 0000000000000000000000000000000000000000..99f1f80cd6d36c210e2f0119a2e441b723a41025 --- /dev/null +++ b/examples/tuning/postgresql/postgresql_sysbench_benchmark.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +TABLES=50 +TABLE_SIZE=20000 + +while true +do + sysbench --config-file=sysbench_config.cfg oltp_read_write --tables=$TABLES --table-size=$TABLE_SIZE --time=30 prepare + ret=$? + if [ $ret == 0 ];then + break + fi +done + +sysbench --config-file=sysbench_config.cfg oltp_read_write --tables=$TABLES --table-size=$TABLE_SIZE --time=100 run > PATH/sysbench_oltp_read_write.log +count=0 +while true +do + val=$(cat PATH/sysbench_oltp_read_write.log | grep 'queries:' | awk -F '(' '{print $2}' | awk -F ' ' '{print $1}') + if [ $val != "" ];then + break + elif [ $count == 10 ];then + break + else + count=$(($count+1)) + sleep 3 + fi +done + +sysbench --config-file=sysbench_config.cfg oltp_read_write --tables=$TABLES --table-size=$TABLE_SIZE cleanup + diff --git a/examples/tuning/postgresql/postgresql_sysbench_client.yaml b/examples/tuning/postgresql/postgresql_sysbench_client.yaml new file mode 100644 index 0000000000000000000000000000000000000000..7828a885ff86bf7175131aadb755c8b3a1e2b684 --- /dev/null +++ b/examples/tuning/postgresql/postgresql_sysbench_client.yaml @@ -0,0 +1,14 @@ +project: "postgresql" +engine : "gbrt" +iterations : 30 +random_starts : 10 + +benchmark : "sh PATH/postgresql_sysbench_benchmark.sh" +evaluations : + - + name: "QPS" + info: + get: "sh PATH/get_eval.sh" + type: "negative" + weight: 100 + diff --git a/examples/tuning/postgresql/postgresql_sysbench_server.yaml b/examples/tuning/postgresql/postgresql_sysbench_server.yaml new file mode 100644 index 0000000000000000000000000000000000000000..07d6fa0882b2007dcf7a272ed4551f2610baf138 --- /dev/null +++ b/examples/tuning/postgresql/postgresql_sysbench_server.yaml @@ -0,0 +1,154 @@ +project: "postgresql" +maxiterations: 2048 +startworkload: "systemctl start postgresql" +stopworkload: "systemctl stop postgresql && sleep 5" +object : + - + name : "kernel.numa_balancing" + info : + desc : "Specifies whether to enable NUMA automatic balancing." + get : "sysctl -n kernel.numa_balancing" + set : "sysctl -w kernel.numa_balancing=$value" + needrestart : "false" + type : "discrete" + options : + - "0" + - "1" + dtype : "string" + - + name : "kernel.sched_autogroup_enabled" + info : + desc : "When enabled, the kernel creates task groups to optimize desktop program scheduling. 0: disabled 1: enabled" + get : "sysctl -n kernel.sched_autogroup_enabled" + set : "sysctl -w kernel.sched_autogroup_enabled=$value" + needrestart : "false" + type : "discrete" + options : + - "0" + - "1" + dtype : "string" + - + name : "kernel.numa_balancing_host" + info : + desc : "Specifies whether to enable host NUMA automatic balancing." + get : "sh PATH/get_system_param_info.sh kernel.numa_balancing" + set : "sh PATH/set_system_param_info.sh kernel.numa_balancing $value" + needrestart : "false" + type : "discrete" + options : + - "0" + - "1" + dtype : "string" + - + name : "kernel.sched_autogroup_enabled_host" + info : + desc : "When enabled, the host kernel creates task groups to optimize desktop program scheduling. 0: disabled 1: enabled" + get : "sh PATH/get_system_param_info.sh kernel.sched_autogroup_enabled" + set : "sh PATH/set_system_param_info.sh kernel.sched_autogroup_enabled $value" + needrestart : "false" + type : "discrete" + options : + - "0" + - "1" + dtype : "string" + - + name : "shared_buffers" + info : + desc : "shared_buffers" + get : "sh PATH/get_postgresql_param_info.sh shared_buffers" + set : "sh PATH/set_postgresql_param_info.sh shared_buffers $value" + needrestart : "true" + type : "continuous" + scope : + - 16384 + - 131072 + dtype : "int" + - + name : "effective_cache_size" + info : + desc : "effective_cache_size" + get : "sh PATH/get_postgresql_param_info.sh effective_cache_size" + set : "sh PATH/set_postgresql_param_info.sh effective_cache_size $value" + needrestart : "true" + type : "discrete" + scope : + - 524288 + - 2097152 + step : 131072 + dtype : "int" + - + name : "work_mem" + info : + desc : "work_mem" + get : "sh PATH/get_postgresql_param_info.sh work_mem" + set : "sh PATH/set_postgresql_param_info.sh work_mem $value" + needrestart : "true" + type : "discrete" + scope : + - 4096 + - 65536 + step : 1024 + dtype : "int" + - + name : "max_parallel_workers" + info : + desc : "max_parallel_workers" + get : "sh PATH/get_postgresql_param_info.sh max_parallel_workers" + set : "sh PATH/set_postgresql_param_info.sh max_parallel_workers $value" + needrestart : "true" + type : "continuous" + scope : + - 4 + - 8 + dtype : "int" + - + name : "maintenance_work_mem" + info : + desc : "maintenance_work_mem" + get : "sh PATH/get_postgresql_param_info.sh maintenance_work_mem" + set : "sh PATH/set_postgresql_param_info.sh maintenance_work_mem $value" + needrestart : "true" + type : "discrete" + scope : + - 65536 + - 1048576 + step : 1024 + dtype : "int" + - + name : "cpu_tuple_cost" + info : + desc : "cpu_tuple_cost" + get : "sh PATH/get_postgresql_param_info.sh cpu_tuple_cost" + set : "sh PATH/set_postgresql_param_info.sh cpu_tuple_cost $value" + needrestart : "true" + type : "discrete" + scope : + - 0.005 + - 0.1 + step : 0.001 + dtype : "float" + - + name : "cpu_index_tuple_cost" + info : + desc : "cpu_index_tuple_cost" + get : "sh PATH/get_postgresql_param_info.sh cpu_index_tuple_cost" + set : "sh PATH/set_postgresql_param_info.sh cpu_index_tuple_cost $value" + needrestart : "true" + type : "discrete" + scope : + - 0.001 + - 0.01 + step : 0.001 + dtype : "float" + - + name : "effective_io_concurrency" + info : + desc : "effective_io_concurrency" + get : "sh PATH/get_postgresql_param_info.sh effective_io_concurrency" + set : "sh PATH/set_postgresql_param_info.sh effective_io_concurrency $value" + needrestart : "true" + type : "continuous" + scope : + - 1 + - 8 + dtype : "int" diff --git "a/examples/tuning/postgresql/postgresql\350\260\203\344\274\230\346\214\207\345\257\274\346\226\207\346\241\243" "b/examples/tuning/postgresql/postgresql\350\260\203\344\274\230\346\214\207\345\257\274\346\226\207\346\241\243" new file mode 100644 index 0000000000000000000000000000000000000000..90ee7a4e85bdafe48de0105752d90e546ad8cad2 --- /dev/null +++ "b/examples/tuning/postgresql/postgresql\350\260\203\344\274\230\346\214\207\345\257\274\346\226\207\346\241\243" @@ -0,0 +1,233 @@ + +# 1.环境准备 +物理机和虚拟机协同调优,同时采集虚拟机的系统参数、应用参数和物理机的应用参数。 +## 1.1 虚拟机上操作 +### 1.1.1 安装postgresql数据库 +在虚拟机上操作 +后续对sysbench编译时会用到postgresql的动态库文件和头文件 +```bash +yum install postgresql-server postgresql-devel -y +``` +### 1.1.2 初始化数据库集群 +在虚拟机上初始化数据库 +```bash +/usr/bin/postgresql-setup --initdb +``` +### 1.1.3 修改监听端口 +在虚拟机机上,修改postgresql的配置文件 /var/lib/pgsql/data/postgresql.conf ,修改第60行,去掉注释并将监听端口改为'*',表示监听所有的ip: + +```bash +listen_addresses = '*' +``` +### 1.1.4 配置数据库免密和远程连接 +在虚拟机上,修改postgresql的配置文件 /var/lib/pgsql/data/pg_hba.conf ,配置本地免密连接,确保和如下配置相同,即trust: +```bash +local all all trust +``` +在虚拟机上,修改postgresql的配置文件 /var/lib/pgsql/data/pg_hba.conf ,在最后一行添加如下内容,允许远程机器免密登录: +```bash +host all all 0.0.0.0/0 trust +``` +### 1.1.5 设置防火墙 +在虚拟机上,开放端口5432,该端口是postgresql的默认端口: +```bash +firewall-cmd --zone=public --add-port=5432/tcp --permanent +firewall-cmd --reload +``` +### 1.1.6 重启服务使配置文件生效 +在虚拟机上,重启postgresql服务 +```bash +systemctl restart postgresql +``` +### 1.1.7 创建数据库sbtest +在虚拟机上操作,要配置免密登录 +登录默认数据库postgres +```bash +psql -U postgres -d postgres +``` +创建数据库sbtest +```bash +CREATE DATABASE sbtest; +``` +查看有哪些数据库 +```bash +\l +``` +退出数据库 +```bash +\q +``` +验证sbtest数据库是否创建成功,连接新创建的数据库sbtest +```bash +psql -U postgres -d sbtest +``` + + +### 1.1.8 配置虚拟机和物理机之间的免密 + +虚拟机上执行,生成密钥,执行此命令后按Enter键可以全部采用默认的配置: +```bash +ssh-keygen +``` +虚拟机上执行,将公钥分发到物理机节点,9.82.190.218为物理机ip,分发公钥过程中需要输入相应物理机的密码: +```bash +ssh-copy-id root@9.82.190.218 +``` +虚拟机上执行,验证免密登录,远程登录物理机9.82.190.218(登录后可以用exit退出): +```bash +ssh root@9.82.190.218 +``` +## 1.2 部署A-Tune环境 +在虚拟机上执行 +具体安装启动方式参考A-Tune README-zh 文档第一节“安装A-Tune”,A-Tune仓库链接:https://gitee.com/openeuler/A-Tune + +```bash +yum install -y atune atune-engine +``` +加载并启动atuned和atune-engine服务: +```bash +systemctl start atuned +systemctl start atune-engine +``` +下载A-Tune源码,具体操作如下 +```bash +cd /home +git clone https://gitee.com/openeuler/A-Tune.git +``` +进入目录A-Tune/examples/tuning/postgresql, +```bash +cd A-Tune/examples/tuning/postgresql +``` +# 2.调优环境准备 +## 2.1 运行环境准备 +在虚拟机上执行 +进入A-Tune/examples/tuning/postgresql目录下,运行prepare.sh脚本来替换调优文件中的路径,执行后还需输入远程物理机的ip: +```bash +sh prepare.sh +``` +物理机为ip为server_ip,执行结果如下: +```shell +[root@openEuler postgresql]# sh prepare.sh +[INPUT] enter server_ip of sysbench to used:9.82.190.218 +[INFO] update path for postgresql files +[INFO] update ip for postgresql files +``` + +## 2.2 运行benchmark脚本(可选) +在虚拟机上运行 A-Tune/examples/tuning/postgresql/postgresql_sysbench_benchmark.sh ,该脚本执行成功证明sysbench测试可以正常运行: +```bash +sh postgresql_sysbench_benchmark.sh +``` + +## 2.3 atune调优 +atune-adm tuning 是 A-Tune 的调优命令,它会根据postgresql_sysbench_client.yaml中的配置文件对postgresql数据库进行调优。会根据环境和性能数据自动选择合适的调优策略,优化集群的性能。调优过程中,可以通过查看A-Tune/examples/tuning/postgresql/sysbench_oltp_read_write.log日志来确定服务是否正常执行: +```bash +atune-adm tuning --project postgresql --detail postgresql_sysbench_client.yaml +``` + +执行调优命令后,会先执行sysbench获取基线数据,然后加载postgresql项目的调优配置文件,输出如下: +第一轮输出: +Best Performance: (QPS=23740.23), Performance Improvement Rate: 3.78% +代表最优的性能指标,以及性能提升比例,对比基线是第一轮benchmark的结果。 +```bash +[root@openEuler postgresql]# atune-adm tuning --project postgresql --detail postgresql_sysbench_client.yaml + Start to benchmark baseline... + 1.Loading its corresponding tuning project: postgresql + 2.Start to tuning the system...... + Current Tuning Progress......(1/30) + Used time: 38s, Total Time: 38s, Best Performance: (QPS=23740.23), Performance Improvement Rate: 3.78% + The 1th recommand parameters is: kernel.numa_balancing=1,kernel.sched_autogroup_enabled=1,shared_buffers=66441,effective_cache_size=786432,work_mem=12288,max_parallel_workers=4,maintenance_work_mem=451584,cpu_tuple_cost=0.029,cpu_index_tuple_cost=0.003,effective_io_concurrency=2 + The 1th evaluation value: (QPS=23740.23)(3.78%) +``` + +## 2.4 恢复原有的配置参数(可选) +原始的参数配置文件为/var/atuned/postgresql-tuning-restore.conf。 +可以先执行如下命令恢复调优前的环境配置: +```bash +atune-adm tuning --restore --project postgresql +``` +# 3.主要文件功能介绍 +## 3.1 get_postgresql_param_info.sh +该脚本在postgresql_sysbench_client.yaml中使用,获取postgresql数据库相关的参数值,用来进行本地调优。 +如果需要扩展为不同机器的postgresql下发参数不同,可以扩展该脚本为两个参数,指定IP和参数名,用于给对应机器的参数进行下发。 +```bash +#!/bin/bash + +# 检查是否传入参数 +if [ -z "$1" ]; then + echo "请提供一个参数" + exit 1 +fi + +# 获取传入的参数 +param=$1 + +cat /var/lib/pgsql/data/postgresql.conf | grep '^$param' | awk -F '=' '{print \$2}' +``` +## 3.2 set_postgresql_param_info.sh +该脚本用于下发参数到postgresql节点。 +若需要多台机器设置不同的值此脚本需额外扩展一个参数IP用于指定对应机器进行参数下发。 +```bash +#!/bin/bash + +# 检查是否传入参数 +if [ -z "$1" ]; then + echo "请提供一个参数" + exit 1 +fi + +# 获取传入的参数 +param=$1 +value=$2 + +sed -i 's/^$param.*$/$param=$value/g' /var/lib/pgsql/data/postgresql.conf +``` +## 3.3 postgresql_sysbench_benchmark.sh +该脚本是sysbench执行脚本,执行性能压测并汇总结果到虚拟机上。该脚本会将测试结果输出到sysbench_oltp_read_write.log文件,最终通过get_eval.sh脚本获得queries指标并反馈给atune。 +```bash +#!/bin/sh + +TABLES=50 +TABLE_SIZE=20000 + +while true +do + sysbench --config-file=sysbench_config.cfg oltp_read_write --tables=$TABLES --table-size=$TABLE_SIZE --time=30 prepare + ret=$? + if [ $ret == 0 ];then + break + fi +done + +sysbench --config-file=sysbench_config.cfg oltp_read_write --tables=$TABLES --table-size=$TABLE_SIZE --time=100 run > PATH/sysbench_oltp_read_write.log +count=0 +while true +do + val=$(cat PATH/sysbench_oltp_read_write.log | grep 'queries:' | awk -F '(' '{print $2}' | awk -F ' ' '{print $1}') + if [ $val != "" ];then + break + elif [ $count == 10 ];then + break + else + count=$(($count+1)) + sleep 3 + fi +done + +sysbench --config-file=sysbench_config.cfg oltp_read_write --tables=$TABLES --table-size=$TABLE_SIZE cleanup +``` +## 3.4 get_eval.sh +该脚本是调优指标获取脚本,通过匹配sysbench测试日志中的固定字段queries来获取调优指标的值,供atune调优使用。 +```bash +#!/bin/bash +i=1 +while [ $i -lt 10 ] +do + sleep $i + if [ -f "PATH/sysbench_oltp_read_write.log" ] && [ -n "$(cat PATH/sysbench_oltp_read_write.log | grep 'queries:' | awk -F '(' '{print $2}' | awk -F ' ' '{print $1}')" ]; then + cat PATH/sysbench_oltp_read_write.log | grep 'queries:' | awk -F '(' '{print $2}' | awk -F ' ' '{print $1}' + break + fi + i=$((i+1)) +done +``` \ No newline at end of file diff --git a/examples/tuning/postgresql/prepare.sh b/examples/tuning/postgresql/prepare.sh new file mode 100644 index 0000000000000000000000000000000000000000..3962d6fcac1292c8d9d462c751008b3359c63bec --- /dev/null +++ b/examples/tuning/postgresql/prepare.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +# 获取当前脚本所在的目录路径 +path=$( + cd "$(dirname "$0")" + pwd +) + +# PostgreSQL 远程服务器的 IP 和连接配置 +read -p "[INPUT] enter server_ip of sysbench to used:" SERVER_IP + +PG_USER="postgres" # 默认 PostgreSQL 用户 +PG_DB="sbtest" # 用于压力测试的数据库 + +echo "[INFO] update path for postgresql files" +sed -i "s#PATH#${path}#g" ${path}/get_eval.sh +sed -i "s#PATH#${path}#g" ${path}/postgresql_sysbench_benchmark.sh +sed -i "s#PATH#${path}#g" ${path}/postgresql_sysbench_client.yaml +sed -i "s#PATH#${path}#g" ${path}/postgresql_sysbench_server.yaml + +echo "[INFO] update ip for postgresql files" +sed -i "s#SERVER_IP#$SERVER_IP#g" ${path}/postgresql_sysbench_server.yaml +sed -i "s#SERVER_IP#$SERVER_IP#g" ${path}/set_postgresql_param_info.sh +sed -i "s#SERVER_IP#$SERVER_IP#g" ${path}/get_postgresql_param_info.sh +sed -i "s#SERVER_IP#$SERVER_IP#g" ${path}/sysbench_config.cfg + +# 安装 sysbench +echo "install sysbench..." +yum install -y git +git clone --depth=1 https://github.com/akopytov/sysbench.git +cd sysbench +yum install -y automake libtool +./autogen.sh + +# 配置 sysbench 使用 PostgreSQL 数据库 +sysbench_cfg="./configure --with-pgsql --without-mysql --with-pgsql-libs=/usr/lib64/ --with-pgsql-includes=/usr/include/" + +# 在这里修改 sysbench 配置 +./configure $sysbench_cfg --pgsql-user=$PG_USER --pgsql-db=$PG_DB + +# 编译并安装 sysbench +make -j +make install + +echo "checking sysbench..." +sysbench --version +if [ $? -ne 0 ]; then + echo "sysbench FAILED"; + exit 1; +fi + +# 创建数据库和用户 +echo "create database and user on PostgreSQL remote server..." +# 使用远程 PostgreSQL 服务器创建数据库和用户 +psql -U $PG_USER -d $PG_DB << EOF +-- 如果数据库不存在则创建 +DO \$\$ +BEGIN + IF NOT EXISTS (SELECT 1 FROM pg_database WHERE datname = '$PG_DB') THEN + CREATE DATABASE $PG_DB; -- 创建数据库 + END IF; +END; +\$\$; +GRANT ALL PRIVILEGES ON DATABASE $PG_DB TO $PG_USER; -- 授予权限 +EOF + +# 重启 PostgreSQL 服务 +echo "restarting PostgreSQL ..." +sudo systemctl restart postgresql + +echo "PostgreSQL setup completed." + +echo "cp postgresql_sysbench_server.yaml to /etc/atuned/tuning" +cp $path/postgresql.conf /var/lib/pgsql/data/postgresql.conf +cp -f $path/postgresql_sysbench_server.yaml /etc/atuned/tuning/postgresql_sysbench_server.yaml + +echo "finish prepare" \ No newline at end of file diff --git a/examples/tuning/postgresql/set_postgresql_param_info.sh b/examples/tuning/postgresql/set_postgresql_param_info.sh new file mode 100644 index 0000000000000000000000000000000000000000..319f77a157793b57316d303e26f852d9754a6a29 --- /dev/null +++ b/examples/tuning/postgresql/set_postgresql_param_info.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# 检查是否传入参数 +if [ -z "$1" ]; then + echo "请提供一个参数" + exit 1 +fi + +# 获取传入的参数 +param=$1 +value=$2 + +sed -i 's/^$param.*$/$param=$value/g' /var/lib/pgsql/data/postgresql.conf \ No newline at end of file diff --git a/examples/tuning/postgresql/set_system_param_info.sh b/examples/tuning/postgresql/set_system_param_info.sh new file mode 100644 index 0000000000000000000000000000000000000000..b0acd24e745745665b8130f4922947ca6c552579 --- /dev/null +++ b/examples/tuning/postgresql/set_system_param_info.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# 检查是否传入参数 +if [ -z "$1" ]; then + echo "请提供一个参数" + exit 1 +fi + +# 获取传入的参数 +param=$1 +value=$2 + +ssh -q root@SERVER_IP "sysctl -w $param=$value" \ No newline at end of file diff --git a/examples/tuning/postgresql/sysbench_config.cfg b/examples/tuning/postgresql/sysbench_config.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b0630e9a23013e7d3baa7f8a402446a56665b5d9 --- /dev/null +++ b/examples/tuning/postgresql/sysbench_config.cfg @@ -0,0 +1,7 @@ +pgsql-host=localhost +pgsql-port=5432 +pgsql-user=postgres +pgsql-db=sbtest +threads=8 +report-interval=1 +db-driver=pgsql