Ответ 1
Я задал тот же вопрос о postgres irc.
Сообщество было уверено, что я максимизировал клиентский pgbench, они предложили использовать -j4
в pgbench и tps увеличен до 23k в секунду.
Я тестировал postgres google-cloud-sql и загружал простую школьную схему
CREATE TABLE school (
id SERIAL NOT NULL PRIMARY KEY,
name TEXT NOT NULL
);
CREATE TABLE class (
id SERIAL NOT NULL PRIMARY KEY,
name TEXT,
school_id INTEGER NOT NULL REFERENCES school
);
CREATE TABLE student (
id SERIAL NOT NULL PRIMARY KEY,
name TEXT,
class_id INTEGER NOT NULL REFERENCES class
);
-- ALL id and foreign keys have indexs
Загружено ~ 15 миллионов строк в общей сложности с 1500 школами, 500 классами на одну школу, 200 учениками на класс.
После этого создайте простой pgbench script
\setrandom sId1 1 20000000
\setrandom sId2 1 20000000
\setrandom sId3 1 20000000
select count(*) from school s
join class c on s.id=c.school_id
join student stu on c.id=stu.class_id where s.id=:sId1;
select count(*) from school s
join class c on s.id=c.school_id
join student stu on c.id=stu.class_id where s.id=:sId2;
select count(*) from school s
join class c on s.id=c.school_id
join student stu on c.id=stu.class_id where s.id=:sId3;
Теперь запустите script с помощью
pgbench -c 90 -f ./sql.sql -n -t 1000
2 ядра, 7,5 ГБ, 90 клиентов -
OUTPUT:
number of transactions actually processed: 90000/90000
tps = 1519.690555 (including connections establishing)
tps = 2320.408683 (excluding connections establishing
26 ядер, 30 ГБ, 90 клиентов -
number of transactions actually processed: 90000/90000
tps = 1553.721286 (including connections establishing)
tps = 2405.664795 (excluding connections establishing)
Вопрос: Почему у нас есть только 80 тпс от 2 до 26 ядер?
Я задал тот же вопрос о postgres irc.
Сообщество было уверено, что я максимизировал клиентский pgbench, они предложили использовать -j4
в pgbench и tps увеличен до 23k в секунду.
Поскольку отдельный SELECT
будет работать только в одном процессе, работающем на одном ядре. Что добавит дополнительные ядра, так это сделать несколько одновременных операций. Поэтому, если вы должны были бросить (скажем) 1000 одновременных запросов в базе данных, они будут выполняться быстрее на 26 ядрах, а не на 2 ядрах.