- Регистрация
- 03.08.2016
- Сообщения
- 1 348
- Благодарностей
- 1 259
- Баллы
- 113
Итак начну с того, что железа хватает достаточно, а именно e5-2692 v3 x2 + 128Гб ddr4 + ssd nvme m2. Работа идет в 48 шаблонов post/get, каждый шаблон еще работает в 30 потоков (все шаблоны одинаковые, кроме использования прокси - так давно еще сделал, чтобы более информативно каждый поток видеть). В самом постере отключено все, что только можно отключить - любые уведомления как самого постера, так и шаблонов. Количество потоков в одном процессе - 1. Сервер бд - openserver. Конфиг 5,6-x64
Базы все в InnoDB.
1. База юзерагенты - 4 млн записей, беру кодом случайную, перед этом генерируя из диапазона номер строки случайную
2. База имена, 100к записей, беру кодом случайную, перед этом генерируя из диапазона номер строки случайную
3. База фамилии, 100к записей, беру кодом случайную, перед этом генерируя из диапазона номер строки случайную
4. База ящики, 9 млн записей, берет каждый поток свою запись, ее изменяет (статус), чтобы другой поток эту запись уже не брал
5. База использованые, добавляю кодом
Перед каждым кодом есть рандомные паузы от 0 до 5 секунд, так и внутри самого шаблона есть паузы.
И в многопотоке таком сервер бд откидывается, как мне кажется, ошибкой
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Вот вопрос - что при этом делать? Что и где поправить и что попробовать? Съехал с работы списков как раз изза тупняков, а с бд вот не могу справится.
C#:
[client]
port = %mysqlport%
character_sets_dir = "%dprogdir%\\modules\\database\\%mysql_driver%\\share\\charsets"
[mysql]
no-auto-rehash
no-beep
character_sets_dir = "%dprogdir%\\modules\\database\\%mysql_driver%\\share\\charsets"
[mysqld]
# Required Settings
basedir = "%dprogdir%\\modules\\database\\%mysql_driver%"
bind-address = %ip%
character_sets_dir = "%dprogdir%\\modules\\database\\%mysql_driver%\\share\\charsets"
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
datadir = "%dprogdir%\\userdata\\%mysql_driver%"
default_storage_engine = InnoDB
ft_min_word_len = 3
local_infile = 0
lower_case_table_names = 1
max_allowed_packet = 256M
pid_file = "%dprogdir%\\userdata\\temp\\mysql.pid"
port = %mysqlport%
secure-file-priv = "%dprogdir%\\userdata\\php_upload"
#skip_name_resolve = 1
tmpdir = "%dprogdir%\\userdata\\temp"
key_buffer_size = 512M
max_allowed_packet = 200M
table_open_cache = 100000
sort_buffer_size = 16M
read_buffer_size = 16M
read_rnd_buffer_size = 16M
myisam_sort_buffer_size = 64M
thread_cache_size = 16
query_cache_size = 16M
query_cache_limit = 256M
query_cache_type = 0
join_buffer_size = 64M
max_connections = 10000
tmp_table_size = 128M
max_heap_table_size = 128M
open_files_limit = 200000
default_authentication_plugin=mysql_native_password
# InnoDB Settings
innodb_data_file_path = ibdata1:10M:autoextend
innodb_data_home_dir = "%dprogdir%\\userdata\\%mysql_driver%"
innodb_buffer_pool_size = 20G
innodb-log-buffer-size = 16M
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 50
transaction-isolation = READ-COMMITTED
innodb_buffer_pool_instances = 20
# Logging
%log%general_log = 1
%log%general_log_file = "%dprogdir%\\userdata\\logs\\%mysql_driver%_queries.log"
log_error = "%dprogdir%\\userdata\\logs\\%mysql_driver%_error.log"
#log_queries_not_using_indexes = 1
#long_query_time = 5
#slow_query_log = 1
#slow_query_log_file = "%dprogdir%\\userdata\\logs\\%mysql_driver%_slow.log"
# MyISAM Settings
key_buffer_size = 32M
myisam_max_sort_file_size = 256M
myisam_recover_options = backup,force
[mysqldump]
quick
quote_names
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
1. База юзерагенты - 4 млн записей, беру кодом случайную, перед этом генерируя из диапазона номер строки случайную
C#:
string host = "localhost";
string port = "3306";
string user = "root";
string password = "pass123";
string name = "useragents";
string charset = "utf8mb4";
string ua_nomer2 = project.Variables["ua_nomer"].Value;
string connectionString = string.Format(
"server={0};port={1};user={2};password={3};database={4};charset={5};pooling=False;SslMode=None;",
host, port, user, password, name, charset
);
MySqlConnection connection = new MySqlConnection(connectionString);
connection.Open();
MySqlCommand command = connection.CreateCommand();
command.Connection = connection;
command.CommandText = "SELECT * FROM table_1 WHERE id = @id";
command.Parameters.AddWithValue("@id", ua_nomer2);
MySqlDataReader reader = command.ExecuteReader();
string id = "";
string text = "";
if (reader.Read())
{
id = reader["id"].ToString();
text = reader["text"].ToString();
}
reader.Close();
connection.Close();
return text;
C#:
string host = "localhost";
string port = "3306";
string user = "root";
string password = "pass123";
string name = "imena";
string charset = "utf8mb4";
string imya_nomer2 = project.Variables["imya_nomer"].Value;
string connectionString = string.Format(
"server={0};port={1};user={2};password={3};database={4};charset={5};pooling=False;SslMode=None;",
host, port, user, password, name, charset
);
MySqlConnection connection = new MySqlConnection(connectionString);
connection.Open();
MySqlCommand command = connection.CreateCommand();
command.Connection = connection;
command.CommandText = "SELECT * FROM table_1 WHERE id = @id";
command.Parameters.AddWithValue("@id", imya_nomer2);
MySqlDataReader reader = command.ExecuteReader();
string id = "";
string text = "";
if (reader.Read())
{
id = reader["id"].ToString();
text = reader["text"].ToString();
}
reader.Close();
connection.Close();
return text;
C#:
string host = "localhost";
string port = "3306";
string user = "root";
string password = "pass123";
string name = "familii";
string charset = "utf8mb4";
string familia_nomer2 = project.Variables["familia_nomer"].Value;
string connectionString = string.Format(
"server={0};port={1};user={2};password={3};database={4};charset={5};pooling=False;SslMode=None;",
host, port, user, password, name, charset
);
MySqlConnection connection = new MySqlConnection(connectionString);
connection.Open();
MySqlCommand command = connection.CreateCommand();
command.CommandText = "SELECT * FROM table_1 WHERE id = @id";
command.Parameters.AddWithValue("@id", familia_nomer2);
MySqlDataReader reader = command.ExecuteReader();
string id = "";
string text = "";
if (reader.Read())
{
id = reader["id"].ToString();
text = reader["text"].ToString();
}
reader.Close();
connection.Close();
return text;
C#:
string host = "localhost";
string port = "3306";
string user = "root";
string password = "pass123";
string name = "emailsall";
string charset = "utf8mb4";
string connectionString = string.Format(
"server={0};port={1};user={2};password={3};database={4};charset={5};pooling=False;SslMode=None;",
host, port, user, password, name, charset
);
MySqlConnection connection = new MySqlConnection(connectionString);
connection.Open();
MySqlCommand command = connection.CreateCommand();
MySqlTransaction transaction = connection.BeginTransaction();
command.Connection = connection;
command.Transaction = transaction;
command.CommandText = "SELECT * FROM table_1 WHERE status = 0 LIMIT 1 FOR UPDATE";
MySqlDataReader reader = command.ExecuteReader();
string id = "";
string text = "";
string status = "";
if (reader.Read())
{
id = reader["id"].ToString();
text = reader["text"].ToString();
status = reader["status"].ToString();
}
reader.Close();
command.CommandText = "UPDATE table_1 SET status = 1 WHERE id = @id";
command.Parameters.AddWithValue("@id", id);
command.ExecuteNonQuery();
transaction.Commit();
connection.Close();
return text;
C#:
string host = "localhost";
string port = "3306";
string user = "root";
string password = "pass123";
string name = "used";
string charset = "utf8mb4";
string connectionString = string.Format(
"server={0};port={1};user={2};password={3};database={4};charset={5};pooling=False;SslMode=None;",
host, port, user, password, name, charset
);
MySqlConnection connection = new MySqlConnection(connectionString);
connection.Open();
MySqlCommand command = connection.CreateCommand();
command.Connection = connection;
command.CommandText = "INSERT INTO table_1 SET text = @text";
command.Parameters.AddWithValue("@text", project.Variables["mail"].Value);
command.ExecuteNonQuery();
connection.Close();
return "ok";
И в многопотоке таком сервер бд откидывается, как мне кажется, ошибкой
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Вот вопрос - что при этом делать? Что и где поправить и что попробовать? Съехал с работы списков как раз изза тупняков, а с бд вот не могу справится.