Database latency - all suggestions appreciated, will compensate

If you have questions or if you want to share your opinion about Aware IM post your message on this forum
kklosson
Posts: 1628
Joined: Sun Nov 23, 2008 3:19 pm
Location: Virginia

Re: Database latency - all suggestions appreciated, will compensate

Post by kklosson »

Stuck in outbox. Sent to .me
V8.8
MySQL, AWS EC2, S3
PDFtk Toolkit
rocketman
Posts: 1252
Joined: Fri Jan 02, 2009 11:22 pm
Location: Preston UK
Contact:

Re: Database latency - all suggestions appreciated, will compensate

Post by rocketman »

I had speed issues when I suddenly found about 300 items in Execution context (still haven't bottomed out why they don't get deleted, since they are all idle). bottom line - It eats your memory and TBH, 8Gb ain't that much these days.

I have also know a large EC object to cause the overnight backups to fail If an item with a large amount of data gets stuck (like a bulk email with some big attachments).

Probably nothing to do with your problem, just musing
Rocketman

V8.7 Developer Edition. Server 2016 Standard edition. MySql 5.5
kklosson
Posts: 1628
Joined: Sun Nov 23, 2008 3:19 pm
Location: Virginia

Re: Database latency - all suggestions appreciated, will compensate

Post by kklosson »

To ACDC,
I'm afraid I will not know what to look for. Can you expand on the character in your query?
V8.8
MySQL, AWS EC2, S3
PDFtk Toolkit
ACDC
Posts: 1142
Joined: Sat Jun 30, 2007 5:03 pm
Location: California, USA

Re: Database latency - all suggestions appreciated, will compensate

Post by ACDC »

I'm afraid I will not know what to look for. Can you expand on the character in your query?
Dump the table to a text file or Excel and then explore the contents of each column for odd-looking things/characters that shouldn't be there.
kklosson
Posts: 1628
Joined: Sun Nov 23, 2008 3:19 pm
Location: Virginia

Re: Database latency - all suggestions appreciated, will compensate

Post by kklosson »

My current thinking is that this is a database issue (MySQL 5.6). When I query the PHS table from the Administrator's VP, I get the same latency. Another table, Candidate, has about the same number of records and displays in about 1 second. There is no reason the PHS table should take any longer. I feel I have performed all normal checks on the table with no errors.
1. Check Table
2. Analyze Table

I have dumped the table to .sql and re-imported it.
I have exported the table to .csv and manually reviewed the contents for any weirdness.

Contributors have mentioned checking mysql.ini. I'll be happy to post it if asked. Also mentioned was checking the logs, which I have. There have been no ERRORs since 2015 (ran out of space). There are some warnings that seem innocuous to me.

I think I can use a good MySQL expert. I am currently replicating the DB server to enable more intrusive tests. As I have stated, I am happy to pay your fee for time spent. If you know such an expert, your recommendation will be appreciated.
V8.8
MySQL, AWS EC2, S3
PDFtk Toolkit
ACDC
Posts: 1142
Joined: Sat Jun 30, 2007 5:03 pm
Location: California, USA

Re: Database latency - all suggestions appreciated, will compensate

Post by ACDC »

I am currently replicating the DB server to enable more intrusive tests.
As suggested, install latest V5.7 version

In the meantime send me your my.ini file so i can compare it with my install

Also
1.have you tried to re create the query from scratch, I have had queries corrupt as a result of AwareIm upgrade , also document attribute settings dont behave in the upgrade process brought on by the Amazon storage feature
2.lookup references filter "Fetch All Records" on a large table will kill memory, this could have crept in, but would show up in memory monitoring..
kklosson
Posts: 1628
Joined: Sun Nov 23, 2008 3:19 pm
Location: Virginia

Re: Database latency - all suggestions appreciated, will compensate

Post by kklosson »

Good thoughts but I don't really think it's the query since other queries, and even the general query on this table from the administrator object query is very slow.

My.ini:
# Other default tuning values
# MySQL Server Instance Configuration File
# ----------------------------------------------------------------------
# Generated by the MySQL Server Instance Configuration Wizard
#
#
# Installation Instructions
# ----------------------------------------------------------------------
#
# On Linux you can copy this file to /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options
# (@localstatedir@ for this installation) or to
# ~/.my.cnf to set user-specific options.
#
# On Windows you should keep this file in the installation directory
# of your server (e.g. C:\Program Files\MySQL\MySQL Server X.Y). To
# make sure the server reads the config file use the startup option
# "--defaults-file".
#
# To run run the server from the command line, execute this in a
# command line shell, e.g.
# mysqld --defaults-file="C:\Program Files\MySQL\MySQL Server X.Y\my.ini"
#
# To install the server as a Windows service manually, execute this in a
# command line shell, e.g.
# mysqld --install MySQLXY --defaults-file="C:\Program Files\MySQL\MySQL Server X.Y\my.ini"
#
# And then execute this in a command line shell to start the server, e.g.
# net start MySQLXY
#
#
# Guildlines for editing this file
# ----------------------------------------------------------------------
#
# In this file, you can use all long options that the program supports.
# If you want to know the options a program supports, start the program
# with the "--help" option.
#
# More detailed information about the individual options can also be
# found in the manual.
#
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/ ... aults.html
#
#
# CLIENT SECTION
# ----------------------------------------------------------------------
#
# The following options will be read by MySQL client applications.
# Note that only client applications shipped by MySQL are guaranteed
# to read this section. If you want your own MySQL client program to
# honor these values, you need to specify it as an option during the
# MySQL client library initialization.
#
[client]
no-beep

# pipe
# socket=mysql
port=3306

[mysql]

default-character-set=utf8


# SERVER SECTION
# ----------------------------------------------------------------------
#
# The following options will be read by the MySQL Server. Make sure that
# you have installed the server correctly (see above) so it reads this
# file.
#
# server_type=3
[mysqld]

# The next three options are mutually exclusive to SERVER_PORT below.
# skip-networking
# enable-named-pipe
# The Pipe the MySQL Server will use
# socket=mysql

# The TCP/IP Port the MySQL Server will listen on
port=3306

# Path to installation directory. All paths are usually resolved relative to this.
basedir="C:/Program Files/MySQL/MySQL Server 5.6/"

# Path to the database root
datadir="C:/ProgramData/MySQL/MySQL Server 5.6/data\"

# The default character set that will be used when a new schema or table is
# created and no character set is defined
character-set-server=utf8

# The default storage engine that will be used when create new tables when
default-storage-engine=INNODB

# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

# Enable Windows Authentication
# plugin-load=authentication_windows.dll

# General and Slow logging.
log-output=NONE
general-log=0
general_log_file="AMAZONA-KC7T9T1.log"
slow-query-log=0
slow_query_log_file="AMAZONA-KC7T9T1-slow.log"
long_query_time=10

# Binary Logging.
# log-bin

# Error Logging.
log-error="AMAZONA-KC7T9T1.err"

# The maximum amount of concurrent sessions the MySQL server will
# allow. One of these connections will be reserved for a user with
# SUPER privileges to allow the administrator to login even if the
# connection limit has been reached.
max_connections=160

# Query cache is used to cache SELECT results and later return them
# without actual executing the same query once again. Having the query
# cache enabled may result in significant speed improvements, if your
# have a lot of identical queries and rarely changing tables. See the
# "Qcache_lowmem_prunes" status variable to check if the current value
# is high enough for your load.
# Note: In case your tables change very often or if your queries are
# textually different every time, the query cache may result in a
# slowdown instead of a performance improvement.
query_cache_size=201M

# The number of open tables for all threads. Increasing this value
# increases the number of file descriptors that mysqld requires.
# Therefore you have to make sure to set the amount of open files
# allowed to at least 4096 in the variable "open-files-limit" in
# section [mysqld_safe]
table_open_cache=2000

# Maximum size for internal (in-memory) temporary tables. If a table
# grows larger than this value, it is automatically converted to disk
# based table This limitation is for a single table. There can be many
# of them.
tmp_table_size=25M

# How many threads we should keep in a cache for reuse. When a client
# disconnects, the client's threads are put in the cache if there aren't
# more than thread_cache_size threads from before. This greatly reduces
# the amount of thread creations needed if you have a lot of new
# connections. (Normally this doesn't give a notable performance
# improvement if you have a good thread implementation.)
thread_cache_size=9

#*** MyISAM Specific options
# The maximum size of the temporary file MySQL is allowed to use while
# recreating the index (during REPAIR, ALTER TABLE or LOAD DATA INFILE.
# If the file-size would be bigger than this, the index will be created
# through the key cache (which is slower).
myisam_max_sort_file_size=100G

# If the temporary file used for fast index creation would be bigger
# than using the key cache by the amount specified here, then prefer the
# key cache method. This is mainly used to force long character keys in
# large tables to use the slower key cache method to create the index.
myisam_sort_buffer_size=50M

# Size of the Key Buffer, used to cache index blocks for MyISAM tables.
# Do not set it larger than 30% of your available memory, as some memory
# is also required by the OS to cache rows. Even if you're not using
# MyISAM tables, you should still set it to 8-64M as it will also be
# used for internal temporary disk tables.
key_buffer_size=8M

# Size of the buffer used for doing full table scans of MyISAM tables.
# Allocated per thread, if a full scan is needed.
read_buffer_size=64K
read_rnd_buffer_size=256K

# This buffer is allocated when MySQL needs to rebuild the index in
# REPAIR, OPTIMZE, ALTER table statements as well as in LOAD DATA INFILE
# into an empty table. It is allocated per thread so be careful with
# large settings.
sort_buffer_size=256K

#*** INNODB Specific options ***
# innodb_data_home_dir=0.0

# Use this option if you have a MySQL server with InnoDB support enabled
# but you do not plan to use it. This will save memory and disk space
# and speed up some things.
# skip-innodb

# Additional memory pool that is used by InnoDB to store metadata
# information. If InnoDB requires more memory for this purpose it will
# start to allocate it from the OS. As this is fast enough on most
# recent operating systems, you normally do not need to change this
# value. SHOW INNODB STATUS will display the current amount used.
innodb_additional_mem_pool_size=4M

# If set to 1, InnoDB will flush (fsync) the transaction logs to the
# disk at each commit, which offers full ACID behavior. If you are
# willing to compromise this safety, and you are running small
# transactions, you may set this to 0 or 2 to reduce disk I/O to the
# logs. Value 0 means that the log is only written to the log file and
# the log file flushed to disk approximately once per second. Value 2
# means the log is written to the log file at each commit, but the log
# file is only flushed to disk approximately once per second.
innodb_flush_log_at_trx_commit=1

# The size of the buffer InnoDB uses for buffering log data. As soon as
# it is full, InnoDB will have to flush it to disk. As it is flushed
# once per second anyway, it does not make sense to have it very large
# (even with long transactions).
innodb_log_buffer_size=2M

# InnoDB, unlike MyISAM, uses a buffer pool to cache both indexes and
# row data. The bigger you set this the less disk I/O is needed to
# access data in tables. On a dedicated database server you may set this
# parameter up to 80% of the machine physical memory size. Do not set it
# too large, though, because competition of the physical memory may
# cause paging in the operating system. Note that on 32bit systems you
# might be limited to 2-3.5G of user level memory per process, so do not
# set it too high.
innodb_buffer_pool_size=10G

# Size of each log file in a log group. You should set the combined size
# of log files to about 25%-100% of your buffer pool size to avoid
# unneeded buffer pool flush activity on log file overwrite. However,
# note that a larger logfile size will increase the time needed for the
# recovery process.
innodb_log_file_size=48M

# Number of threads allowed inside the InnoDB kernel. The optimal value
# depends highly on the application, hardware as well as the OS
# scheduler properties. A too high value may lead to thread thrashing.
innodb_thread_concurrency=8

# The increment size (in MB) for extending the size of an auto-extend InnoDB system tablespace file when it becomes full.
innodb_autoextend_increment=64M

# The number of regions that the InnoDB buffer pool is divided into.
# For systems with buffer pools in the multi-gigabyte range, dividing the buffer pool into separate instances can improve concurrency,
# by reducing contention as different threads read and write to cached pages.
innodb_buffer_pool_instances=16

# Determines the number of threads that can enter InnoDB concurrently.
innodb_concurrency_tickets=5000

# Specifies how long in milliseconds (ms) a block inserted into the old sublist must stay there after its first access before
# it can be moved to the new sublist.
innodb_old_blocks_time=1000

# It specifies the maximum number of .ibd files that MySQL can keep open at one time. The minimum value is 10.
innodb_open_files=500

# When this variable is enabled, InnoDB updates statistics during metadata statements.
innodb_stats_on_metadata=0

# When innodb_file_per_table is enabled (the default in 5.6.6 and higher), InnoDB stores the data and indexes for each newly created table
# in a separate .ibd file, rather than in the system tablespace.
innodb_file_per_table=1

# Use the following list of values: 0 for crc32, 1 for strict_crc32, 2 for innodb, 3 for strict_innodb, 4 for none, 5 for strict_none.
innodb_checksum_algorithm=0

# The number of outstanding connection requests MySQL can have.
# This option is useful when the main MySQL thread gets many connection requests in a very short time.
# It then takes some time (although very little) for the main thread to check the connection and start a new thread.
# The back_log value indicates how many requests can be stacked during this short time before MySQL momentarily
# stops answering new requests.
# You need to increase this only if you expect a large number of connections in a short period of time.
back_log=70

# If this is set to a nonzero value, all tables are closed every flush_time seconds to free up resources and
# synchronize unflushed data to disk.
# This option is best used only on systems with minimal resources.
flush_time=0

# The minimum size of the buffer that is used for plain index scans, range index scans, and joins that do not use
# indexes and thus perform full table scans.
join_buffer_size=256K

# The maximum size of one packet or any generated or intermediate string, or any parameter sent by the
# mysql_stmt_send_long_data() C API function.
max_allowed_packet=1024M

# If more than this many successive connection requests from a host are interrupted without a successful connection,
# the server blocks that host from performing further connections.
max_connect_errors=100

# Changes the number of file descriptors available to mysqld.
# You should try increasing the value of this option if mysqld gives you the error "Too many open files".
open_files_limit=4110

# Set the query cache type. 0 for OFF, 1 for ON and 2 for DEMAND.
query_cache_type=1

# If you see many sort_merge_passes per second in SHOW GLOBAL STATUS output, you can consider increasing the
# sort_buffer_size value to speed up ORDER BY or GROUP BY operations that cannot be improved with query optimization
# or improved indexing.
sort_buffer_size=256K

# The number of table definitions (from .frm files) that can be stored in the definition cache.
# If you use a large number of tables, you can create a large table definition cache to speed up opening of tables.
# The table definition cache takes less space and does not use file descriptors, unlike the normal table cache.
# The minimum and default values are both 400.
table_definition_cache=1400

# Specify the maximum size of a row-based binary log event, in bytes.
# Rows are grouped into events smaller than this size if possible. The value should be a multiple of 256.
binlog_row_event_max_size=8K

# If the value of this variable is greater than 0, a replication slave synchronizes its master.info file to disk.
# (using fdatasync()) after every sync_master_info events.
sync_master_info=10000

# If the value of this variable is greater than 0, the MySQL server synchronizes its relay log to disk.
# (using fdatasync()) after every sync_relay_log writes to the relay log.
sync_relay_log=10000

# If the value of this variable is greater than 0, a replication slave synchronizes its relay-log.info file to disk.
# (using fdatasync()) after every sync_relay_log_info transactions.
sync_relay_log_info=10000

innodb_read_io_threads=64
innodb_write_io_threads=64
innodb_io_capacity=1000
V8.8
MySQL, AWS EC2, S3
PDFtk Toolkit
ACDC
Posts: 1142
Joined: Sat Jun 30, 2007 5:03 pm
Location: California, USA

Re: Database latency - all suggestions appreciated, will compensate

Post by ACDC »

PM me your email address and ill send you my version my.ini, there are some subtle differences but its worth a shot

Drop my.ini file into your Mysql setup (after renaming your version), change your port settings in AwareIM to 3307 and restart MySql
kklosson
Posts: 1628
Joined: Sun Nov 23, 2008 3:19 pm
Location: Virginia

Re: Database latency - all suggestions appreciated, will compensate

Post by kklosson »

Here is my question to ChatGPT:
"On MySQL database, if I remove the primary key, save the change, and then set it back, does it regenerate the index?"

Answer:
If you remove the primary key from a MySQL database table, the index is also removed ¹. If you then set the primary key back, it will regenerate the index ¹.

However, it is important to note that if you remove the primary key and then add it back, the order of the rows may change. This is because MySQL uses a clustered index for the primary key, which determines the physical order of the rows in the table. When you remove and then add back a primary key, MySQL may need to reorder the rows to maintain the physical order of the table.

Just wondering who thinks this is a good or bad idea for resolving the issue...
I am currently spinning up a duplicate server for this type of experimentation.
V8.8
MySQL, AWS EC2, S3
PDFtk Toolkit
Rennur
Posts: 1191
Joined: Thu Mar 01, 2012 5:13 am
Location: Sydney, Australia

Re: Database latency - all suggestions appreciated, will compensate

Post by Rennur »

# The minimum size of the buffer that is used for plain index scans, range index scans, and joins that do not use
# indexes and thus perform full table scans.
join_buffer_size=256K
I think the 256k default value for join_buffer_size is too low. I suggest increasing this to (M) value such as 64M (mine is 256M).
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_join_buffer_size
kklosson
Posts: 1628
Joined: Sun Nov 23, 2008 3:19 pm
Location: Virginia

Re: Database latency - all suggestions appreciated, will compensate

Post by kklosson »

Many thanks. Shall try.
V8.8
MySQL, AWS EC2, S3
PDFtk Toolkit
Rennur
Posts: 1191
Joined: Thu Mar 01, 2012 5:13 am
Location: Sydney, Australia

Re: Database latency - all suggestions appreciated, will compensate

Post by Rennur »

Related variable is the sort_buffer_size. Try setting same value as the join_buffer_size.
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_sort_buffer_size

# If you see many sort_merge_passes per second in SHOW GLOBAL STATUS output, you can consider increasing the
# sort_buffer_size value to speed up ORDER BY or GROUP BY operations that cannot be improved with query optimization
# or improved indexing.
# Default 256K
sort_buffer_size = 64M
BLOMASKY
Posts: 1473
Joined: Wed Sep 30, 2015 10:08 pm
Location: Ocala FL

Re: Database latency - all suggestions appreciated, will compensate

Post by BLOMASKY »

1st disclaimer I can't even spell mysql. I only use MSSQL so my suggestions might not make any sense but I would:

1). Open whatever tool you use to access the DB and create and run an INSERT statement and see if it takes more than a second. If it is fast then it is NOT a DB issue with the main table.

1A). Aware creates a unique key called ID in each table and by default updates a BS_IDGEN table. If others are running a LONG process that is adding a record to another table, it could have a lock on that table / row (does not matter, since only 1 record / row) in that table. So if you use aware to add a record when no one else is using the system is it still slow?

2). How many indexes do you have on the table and are they indexes with limited # of duplicates. I.e. iff you have an index on SEX and only have M or F and 1000's of rows, it will be slow to add new records. (since once an index finds a match it then reads 1 record at a time). Can you drop all indexes on this table and try to add the record. If its now fast, then you had sucky indexes. (sucky is a very technical term)

I see that you have 8meg for your sql server. Are other tasks / processes running on the same server? That seems VERY low for SQL. But again, I only know MSSQL.

Good luck
Bruce
kklosson
Posts: 1628
Joined: Sun Nov 23, 2008 3:19 pm
Location: Virginia

Re: Database latency - all suggestions appreciated, will compensate

Post by kklosson »

Sadly, nothing offered yet has helped. It really behaves as though an index is shot somewhere but I have carefully reviewed the server log for everything it does for this query and have examined all relevant tables and run a number of test queries mimicking those in this query process. They all run very quickly at the command line.

I also upped memory on the AwareIM (4GB each to AIM and Tomcat) server with no difference and neither AwareIM nor Tomcat ever get over 1GB in the Task Manager processes.

Somewhere between constructing the query and delivering it to the client, there is latency. Damn if I can find it.
V8.8
MySQL, AWS EC2, S3
PDFtk Toolkit
customaware
Posts: 2405
Joined: Mon Jul 02, 2012 12:24 am
Location: Ulaanbaatar, Mongolia

Re: Database latency - all suggestions appreciated, will compensate

Post by customaware »

It is a long shot Kingsley but, have you actually tried completely recreating the Query and trying the new version.

I vaguely remember a similar slowness a long long time ago and ended up trashing that query and creating it again.

I doubt this will help but worth a try?
Cheers,
Mark
_________________
AwareIM 6.0, 8.7, 8.8, 9.0 , MariaDB, Windows 10, Ubuntu Linux. Theme: Default, Browser: Arc
Upcloud, Obsidian....
Image
Post Reply