Score:0

การใช้งาน CPU สูงโดย Apache/MySQL

ธง cn
a b

ฉันมีปัญหากับการใช้งาน CPU บนเว็บไซต์ที่ใช้ WordPress, Apache และ MySQL ในระหว่างวัน การใช้งาน CPU ของ MySQL และ Apache สูงถึง 2400% เป็นครั้งคราว (ฉันมีทั้งหมด 24 คอร์) เซิร์ฟเวอร์หยุดทำงาน โหลดเฉลี่ยสูงถึง 24

เมื่อเร็ว ๆ นี้มีการจราจรหนาแน่นกว่าปกติเล็กน้อย แต่สิ่งนี้ไม่น่าจะถาวรใช่ไหม? ฉันได้อัปเดตเคอร์เนล ฐานข้อมูล ไลบรารี รีสตาร์ทหลายครั้ง และยังคงค้าง ฉันได้ดูรายการกระบวนการของ DB แล้ว แต่ไม่มีอะไรพิเศษ ในฐานข้อมูลมีข้อมูลค่อนข้างมาก เมื่อสองสามสัปดาห์ก่อนมันใช้ได้ดี แต่ตอนนี้มันไม่ได้แล้ว ดังนั้นจึงไม่ควรเป็นข้อความค้นหาที่ไม่ได้เพิ่มประสิทธิภาพ

อะไรคือสาเหตุของพฤติกรรมดังกล่าว?

อัปเดต:

ผลลัพธ์ของ A) แสดงสถานะทั่วโลกเช่น 'com_%r%_table';

+----------------------+------+
| ชื่อตัวแปร | ค่า |
+----------------------+------+
| Com_alter_table | 5 |
| Com_create_table | 34 |
| Com_drop_table | 0 |
| Com_rename_table | 0 |
| Com_show_create_table | 0 |
+----------------------+------+
5 แถวในชุด (3.04 วินาที)

B) แสดงสถานะทั่วโลกเช่น 'uptime%';

+------------------------------+++++
| ชื่อตัวแปร | ค่า |
+------------------------------+++++
| เวลาทำงาน | 455524 |
| Uptime_since_flush_status | 455524 |
+------------------------------+++++
2 แถวในชุด (0.01 วินาที)

C) แสดงสถานะทั่วโลก เช่น '%dirty%';

+-------------------------------- +++++
| ชื่อตัวแปร | ค่า |
+-------------------------------- +++++
| Innodb_buffer_pool_pages_dirty | 0 |
| Innodb_buffer_pool_bytes_dirty | 0 |
+-------------------------------- +++++
2 แถวในชุด (0.00 วินาที)

ป.ล. ฉันยังคงมีปัญหากับเซิร์ฟเวอร์ ฉันจำเป็นต้องเปลี่ยนชุดอักขระบนฐานข้อมูลใดฐานข้อมูลหนึ่ง และใช้เวลามากกว่าหนึ่งวันจึงจะเสร็จ โดยมีเพียง 400,000 แถว เมื่อก่อนก็ใช้เวลาบ้างแต่ไม่มาก ฉันสงสัย เป็นไปได้ไหมว่าหลังจากการโจมตี DDOS อาจมีการเปลี่ยนแปลงบางอย่างกับฐานข้อมูลเพื่อให้ทำงานได้แย่ลง

อัปเดต 2:

ผลลัพธ์ mysqltuner:

[--] ข้ามการตรวจสอบเวอร์ชันสำหรับสคริปต์ MySQLTuner
[ตกลง] เข้าสู่ระบบโดยใช้ข้อมูลรับรองจากบัญชีบำรุงรักษา Debian
[ตกลง] ขณะนี้รองรับ MySQL เวอร์ชัน 8.0.26-0ubuntu0.20.04.2
[ตกลง] ทำงานบนสถาปัตยกรรม 64 บิต
 
-------- คำแนะนำไฟล์บันทึก --------------------------------------- ---------------------------
[ตกลง] ไฟล์บันทึก /var/log/mysql/error.log มีอยู่
[--] ไฟล์บันทึก: /var/log/mysql/error.log(0B)
[--] ไฟล์บันทึก /var/log/mysql/error.log ว่างเปล่า สมมติว่าบันทึกการหมุน ใช้ --server-log={file} สำหรับไฟล์ที่ชัดเจน
 
-------- สถิติเครื่องมือจัดเก็บข้อมูล --------------------------------------- --------------------------
[--] สถานะ: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MEMORY +MRG_MYISAM +MyISAM +PERFORMANCE_SCHEMA 
[--] ข้อมูลในตาราง InnoDB: 262.4G (ตาราง: 179)
[ตกลง] ตารางที่แยกส่วนทั้งหมด: 0
 
-------- ตัวชี้วัดประสิทธิภาพการวิเคราะห์ --------------------------------------- -----------------------
[--] innodb_stats_on_metadata: ปิด
[ตกลง] ไม่มีการอัปเดตสถิติระหว่างการสืบค้น INFORMATION_SCHEMA
 
-------- คำแนะนำด้านความปลอดภัย ---------------------------------------- --------------------------
[--] ข้ามไปเนื่องจากคุณสมบัติที่ไม่รองรับสำหรับ MySQL 8
 
-------- คำแนะนำด้านความปลอดภัย CVE --------------------------------------- -----------------------
[ตกลง] ไม่พบ CVE ด้านความปลอดภัยสำหรับเวอร์ชันของคุณ
 
-------- การวัดประสิทธิภาพ ---------------------------------------- -------------------------------
[--] เพิ่มขึ้นสำหรับ: 5d 11h 4m 6s (15M q [31.945 qps], 191K conn, TX: 80G, RX: 2G)
[--] อ่าน / เขียน: 99% / 1%
[--] เปิดใช้งานการบันทึกไบนารี (โหมด GTID: ปิด)
[--] หน่วยความจำกายภาพ : 31.4G
[--] หน่วยความจำ MySQL สูงสุด : 9.8G
[--] หน่วยความจำกระบวนการอื่น: 0B
[--] บัฟเฟอร์ทั้งหมด: 176.0M ทั่วโลก + 65.1M ต่อเธรด (สูงสุด 151 เธรด)
[--] P_S การใช้หน่วยความจำสูงสุด: 72B
[--] การใช้หน่วยความจำสูงสุดของ Galera GCache: 0B
[ตกลง] การใช้หน่วยความจำสูงสุด: 9.8G (31.14% ของ RAM ที่ติดตั้ง)
[ตกลง] การใช้หน่วยความจำสูงสุดที่เป็นไปได้: 9.8G (31.14% ของ RAM ที่ติดตั้ง)
[ตกลง] การใช้หน่วยความจำที่เป็นไปได้โดยรวมกับกระบวนการอื่นนั้นเข้ากันได้กับหน่วยความจำที่มีอยู่
[ตกลง] ข้อความค้นหาช้า: 0% (0/15M)
[!!] การใช้งานการเชื่อมต่อสูงสุด: 100% (151/151)
[ตกลง] การเชื่อมต่อที่ถูกยกเลิก: 0.09% (174/191712)
[!!] การจำแนกชื่อเปิดใช้งานอยู่ : การจำแนกชื่อแบบย้อนกลับถูกสร้างขึ้นสำหรับการเชื่อมต่อใหม่แต่ละครั้ง และสามารถลดประสิทธิภาพการทำงานได้
[--] ลบแคชแบบสอบถามใน MySQL 8 แล้ว
[ตกลง] การเรียงลำดับที่ต้องการตารางชั่วคราว: 0% (การเรียงลำดับอุณหภูมิ 0 ครั้ง / การเรียงลำดับ 5M)
[ตกลง] ไม่มีการรวมโดยไม่มีดัชนี
[ตกลง] ตารางชั่วคราวที่สร้างขึ้นบนดิสก์: 0% (0 บนดิสก์ / ทั้งหมด 2M)
[ตกลง] อัตราการเข้าถึงแคชของเธรด: 92% (สร้าง 15K / เชื่อมต่อ 191K)
[ตกลง] อัตราการเข้าถึงแคชของตาราง: 99% (การเข้าถึง 21M / คำขอ 21M)
[ตกลง] table_definition_cache(2000) สูงกว่าจำนวนตาราง (506)
[ตกลง] ขีดจำกัดการเปิดไฟล์ที่ใช้: 0% (6/10K)
[ตกลง] ได้รับล็อคโต๊ะทันที: 100% (9 ทันที / 9 ล็อค)
[ตกลง] การเข้าถึงหน่วยความจำแคช Binlog: 99.57% (25538 หน่วยความจำ / 25647 ทั้งหมด)
 
-------- แผนการปฏิบัติงาน ---------------------------------------- --------------------------------
[--] หน่วยความจำที่ใช้โดย P_S: 72B
[--] ติดตั้งสคีมา Sys แล้ว
 
-------- ตัวชี้วัด ThreadPool ---------------------------------------- --------------------------------
[--] สถานะ ThreadPool ถูกปิดใช้งาน
 
-------- เมตริก MyISAM ---------------------------------------- ------------------------------------
[--] MyISAM Metrics ถูกปิดใช้งานใน MySQL เวอร์ชันล่าสุด
 
-------- ตัวชี้วัด InnoDB ---------------------------------------- ------------------------------------
[--] เปิดใช้งาน InnoDB
[--] การทำงานพร้อมกันของเธรด InnoDB: 0
[ตกลง] เปิดใช้งานไฟล์ InnoDB ต่อตารางแล้ว
[!!] บัฟเฟอร์พูล InnoDB / ขนาดข้อมูล: 128.0M/262.4G
[!!] Ratio InnoDB log file size / InnoDB Buffer pool size (75 %): 48.0M * 2/128.0M ควรเท่ากับ 25%
[ตกลง] อินสแตนซ์ของพูลบัฟเฟอร์ InnoDB: 1
[--] จำนวน InnoDB Buffer Pool Chunk : 1 ต่อ 1 Buffer Pool Instance(s)
[ตกลง] Innodb_buffer_pool_size สอดคล้องกับ Innodb_buffer_pool_chunk_size & Innodb_buffer_pool_instances
[ตกลง] ประสิทธิภาพบัฟเฟอร์การอ่าน InnoDB: 98.29% (925392031 ครั้ง/ รวม 941450541 ครั้ง)
[!!] ประสิทธิภาพ InnoDB Write Log: 309.39% (25100125 ครั้ง/ ทั้งหมด 8112662 ครั้ง)
[!!] บันทึก InnoDB รอ: 0.00% (65 รอ / 33212787 เขียน)
 
-------- Aria เมตริก ---------------------------------------- --------------------------------------
[--] Aria Storage Engine ไม่พร้อมใช้งาน
 
-------- TokuDB เมตริก ---------------------------------------- ------------------------------------
[--] TokuDB ถูกปิดใช้งาน
 
-------- ตัวชี้วัด XtraDB ---------------------------------------- ------------------------------------
[--] XtraDB ถูกปิดใช้งาน
 
-------- Galera เมตริก ---------------------------------------- ------------------------------------
[--] Galera ถูกปิดใช้งาน
 
-------- เมตริกการจำลองแบบ ---------------------------------------- -------------------------------
[--] การจำลองแบบซิงโครนัสของ Galera: NO
[--] ไม่มีการจำลองแบบทาสสำหรับเซิร์ฟเวอร์นี้
[--] รูปแบบ Binlog: ROW
[--] รองรับ XA: เปิด
[--] ต้นแบบการจำลองแบบกึ่งซิงโครนัส: ไม่ได้เปิดใช้งาน
[--] ทาสการจำลองแบบกึ่งซิงโครนัส: ไม่ได้เปิดใช้งาน
[--] นี่คือเซิร์ฟเวอร์แบบสแตนด์อโลน
 
-------- ข้อแนะนำ ----------------------------------------- ----------------------------------
คำแนะนำทั่วไป:
    ลดหรือกำจัดการเชื่อมต่อแบบถาวรเพื่อลดการใช้การเชื่อมต่อ
    กำหนดค่าบัญชีของคุณด้วย ip หรือ subnets เท่านั้น จากนั้นอัปเดตการกำหนดค่าของคุณด้วยskip-name-resolve=1
    ก่อนเปลี่ยน innodb_log_file_size และ/หรือ innodb_log_files_in_group โปรดอ่านสิ่งนี้: *link*
ตัวแปรที่จะปรับ:
    max_connections (> 151)
    wait_timeout (< 28800)
    interactive_timeout (< 28800)
    innodb_buffer_pool_size (>= 262.4G) ถ้าเป็นไปได้
    innodb_log_file_size ควรเป็น (=16M) หากเป็นไปได้ ดังนั้นขนาดไฟล์บันทึกทั้งหมดของ InnoDB จะเท่ากับ 25% ของขนาดบัฟเฟอร์พูล
    innodb_log_buffer_size (>= 16M)

อัปเดต 3:

วันนี้เซิร์ฟเวอร์ของฉันหยุดทำงานอีกครั้ง กระบวนการที่โอเวอร์โหลด CPU คือ apache2 ฉันสามารถหยุดบริการได้ และทันใดนั้นทุกอย่างก็เริ่มทำงานได้อย่างราบรื่น ฉันได้พยายามสำรองข้อมูลของฐานข้อมูล ซึ่งเป็นฐานข้อมูลที่มีแถวจำนวนมาก และมันก็ใช้ได้ดี แต่หลังจากนั้นไม่นาน ทุกอย่างก็หยุดทำงานอีกครั้ง: การใช้งาน CPU โดยบางกระบวนการอยู่ที่ 2400% ค่าเฉลี่ยการโหลดเกิน 24 ดังนั้น คำแนะนำของฉันคือ ไม่ใช่ apache ที่โหลด CPU ไม่ใช่ MySQL เช่นกัน กระบวนการบางอย่าง เช่น htop หรือ gzip ที่ฉันใช้สำหรับการสำรองข้อมูล ก็มีการใช้งาน CPU สูงเป็นครั้งคราวเช่นกัน จะเป็นอย่างไร นี่อาจเป็นผลมาจากการโจมตี DDOS และถ้าเป็นเช่นนั้น ฉันจะแก้ไขได้อย่างไร

Gerrit avatar
cn flag
การเรียกใช้ `perf top` ในช่วงที่มี CPU สูงเหล่านี้อาจเป็นการเริ่มต้น ความสามารถในการอ่านจะช่วยได้มากโดยการติดตั้งแพ็คเกจสัญลักษณ์ดีบักของ Apache, PHP และ Mysql สำหรับแพลตฟอร์มของคุณ หากปัญหาอยู่ในฐานข้อมูล `mysqladmin Extended-Status` อาจมีประโยชน์ โดยเฉพาะอย่างยิ่งดูว่า create_tmp_disk_tables หรือ sort_merge_passes เพิ่มขึ้นมากหรือไม่
Wilson Hauck avatar
jp flag
คุณช่วยโพสต์ผลลัพธ์แบบข้อความของ A) SHOW GLOBAL STATUS LIKE 'com_%r%_table'; และ B) แสดงสถานะทั่วโลกเช่น 'uptime%'; และ C) แสดงสถานะทั่วโลก เช่น '%dirty%'; เพื่อการวิเคราะห์? อาจมีเงื่อนงำในผลลัพธ์ของคุณ ยินดีต้อนรับสู่เซิร์ฟเวอร์ฟอลต์
a b avatar
cn flag
a b
@WilsonHauck ฉันได้เพิ่มผลลัพธ์ที่ร้องขอแล้ว
Michael Hampton avatar
cz flag
โปรดโพสต์ผลลัพธ์ที่สมบูรณ์ของ mysqltuner.pl
a b avatar
cn flag
a b
@MichaelHampton เพิ่มเอาต์พุต mysqltuner
Wilson Hauck avatar
jp flag
@ab ผลลัพธ์ของคุณจากข้อมูล SHOW GLOBAL STATUS ที่เลือกจะช่วยลดการหยุดทำงานของตาราง DROP/CREATE ซึ่งอาจทำให้เกิดการหยุดชั่วขณะ ไม่มีหน้า DIRTY ที่ก่อให้เกิดปัญหาหรือความล่าช้า จะขอข้อมูลเพิ่มเติมเพื่อดูข้อมูลจากอินสแตนซ์ของคุณต่อไป
Wilson Hauck avatar
jp flag
ขอข้อมูลเพิ่มเติม อุปกรณ์ SSD หรือ NVME บนเซิร์ฟเวอร์ MySQL Host ใด ๆ โพสต์บน pastebin.com และแชร์ลิงก์ จากรูทการเข้าสู่ระบบ SSH ของคุณ ผลลัพธ์ข้อความของ: B) แสดงสถานะทั่วโลก; หลังจาก UPTIME ขั้นต่ำ 24 ชั่วโมง C) แสดงตัวแปรทั่วโลก; D) แสดงรายการกระบวนการทั้งหมด; จ) สถานะ; ไม่แสดงสถานะเพียงสถานะ; และข้อมูลที่เป็นประโยชน์มาก (ถ้ามี) รวมถึง - htop หรือ top สำหรับแอพที่ใช้งานมากที่สุด ulimit -a สำหรับรายการลิมิตของ Linux/Unix iostat -xm 5 3 สำหรับ IOPS ตามอุปกรณ์และจำนวนคอร์/ซีพียู สำหรับการวิเคราะห์การปรับแต่งเวิร์กโหลดของเซิร์ฟเวอร์เพื่อให้คำแนะนำ
a b avatar
cn flag
a b
@WilsonHauck A) ขออภัย ฉันไม่ทราบจริงๆ และฉันไม่แน่ใจว่าจะตรวจสอบได้อย่างไร B) แสดงสถานะทั่วโลก; https://pastebin.com/hafPj9f3.C) แสดงตัวแปรทั่วโลก; https://pastebin.com/WSEYa9EL. D) แสดงรายการกระบวนการทั้งหมด; https://pastebin.com/LYhVkDR6. แบบสอบถาม audio_records เป็นข้อมูลสำรองของฐานข้อมูล จ) สถานะ; https://pastebin.com/ziTNcE0Z. htop - https://ibb.co/0sTy30r ulimit -a - https://pastebin.com/F9XnG7hZ ไอโอสแตท - https://ibb.co/5YrzvbJ
a b avatar
cn flag
a b
นอกจากนี้ ฉันเพิ่งสังเกตว่าแม้ว่าค่าเฉลี่ยในการโหลดจะน้อยกว่า 5 และการใช้งาน CPU โดยรวมก็ค่อนข้างต่ำ เว็บไซต์ก็ยังใช้เวลาในการตอบนานกว่าปกติมาก คำขอบางรายการถูกยกเลิกเนื่องจากหมดเวลา
Wilson Hauck avatar
jp flag
@ab การวิเคราะห์ข้อมูลของคุณอยู่ในระหว่างดำเนินการ หวังว่าจะโพสต์คำแนะนำในอีก 12 ชั่วโมงข้างหน้า ขอบคุณ.
Score:1
ธง jp

อัตราต่อวินาที = RPS

คำแนะนำที่ควรพิจารณาสำหรับส่วน my.cnf [mysqld] ของคุณ

innodb_buffer_pool_size=22G # จาก 128M เพื่อรองรับข้อมูล 262G ของคุณได้ดียิ่งขึ้น
max_connections=256 # จาก 151 เนื่องจากคุณใช้การเชื่อมต่อทั้งหมดแล้ว
thread_cache_size=150 # จาก 9 เพื่อลด threads_created RPhr จาก 111
innodb_log_file_size=4G # จาก 50M เพื่อรองรับมากกว่าหนึ่งชั่วโมงก่อนการหมุน
innodb_log_buffer_size=1G # จาก 16M เพื่อรองรับ ~ 30 นาทีก่อนเขียนสื่อ

ควรปรับปรุงประสิทธิภาพอย่างมาก มีโอกาสอีกมากมายในการปรับปรุงประสิทธิภาพ ดูโปรไฟล์สำหรับข้อมูลติดต่อและสคริปต์ยูทิลิตี้ที่ดาวน์โหลดได้ฟรีเพื่อปรับปรุงประสิทธิภาพ

a b avatar
cn flag
a b
ขอบคุณสำหรับข้อเสนอแนะ ฉันได้เพิ่มเข้าไปแล้ว และสำหรับเวลาที่มีการปรับปรุงประสิทธิภาพ แต่การใช้หน่วยความจำถูกขัดขวาง ฉันมีหน่วยความจำเพียง 32Gb และการใช้งานสูงสุดของ MySQL คือ 32Gb เมื่อฉันพยายามเพิ่มประสิทธิภาพตาราง หน่วยความจำโอเวอร์โหลด ตอนนี้หน่วยความจำเสมือนของ mysqld อยู่ที่ 31.4Gb แต่ปัญหายังคงเหมือนเดิม ฉันพบวิธีทำซ้ำแล้ว เมื่อฉันพยายามเปิด 6-10 หน้าพร้อมกัน การใช้งาน CPU เพิ่มขึ้น ในรายการกระบวนการมีกระบวนการนอนหลับจำนวนมากซึ่งขอข้อมูลจากฐานข้อมูลเว็บไซต์ พวกมันไม่อยู่ที่นั่นนานเกินไป เวลาที่ผมเห็นมากที่สุดคือ ~500 วินาที
Wilson Hauck avatar
jp flag
htop ที่คุณโพสต์เมื่อสองสามวันก่อนแสดงกระบวนการมากมายที่มีเวลามากกว่า 1 ชั่วโมง เมื่อคุณต้องการหารือ โปรดติดต่อ หากข้อเสนอแนะใดเป็นไปในเชิงบวก โปรดพิจารณาโหวตหรือยอมรับ โปรด กรุณาโพสต์แบบสอบถามที่เปิด 6-10 หน้า
Wilson Hauck avatar
jp flag
@ab คุณช่วยโพสต์ผลลัพธ์ TEXT ไปที่ pastebin.com ได้ไหม ผลลัพธ์ของการแสดงสถานะของเครื่องยนต์ performance_schema; ขอขอบคุณ.
a b avatar
cn flag
a b
นี่คือ "แสดงสถานะของเครื่องยนต์ performance_schema;" ผลลัพธ์: https://pastebin.com/yKjjqZPt หลังจากนั้น ฉันได้ปิดการใช้งาน MySQL และปัญหายังคงอยู่ ฉันไม่แน่ใจว่านี่เป็นปัญหาของ DB จะต้องเป็นสิ่งที่ในระดับที่ลึกกว่านั้น
Wilson Hauck avatar
jp flag
บรรทัดสุดท้ายของการโพสต์ระบุว่า 228M ของ RAM ใช้เพื่อเก็บข้อมูล performance_schema ด้วย 32G ไม่ใช่ปัญหา คุณจะมีเวลาหารือเกี่ยวกับ htop ของคุณกับกระบวนการที่ทำงานมาหลายชั่วโมงเมื่อใด คุณโฮสต์ซอฟต์แวร์ zabbix บนเซิร์ฟเวอร์เดียวกันนี้หรือไม่ ไม่ควรโฮสต์ซอฟต์แวร์ zabbix บนเซิร์ฟเวอร์ที่ใช้งานจริง
Score:0
ธง us

มันพูดยากมาก แต่คุณกำลังบอกว่าคุณกำลังใช้งาน WordPress และมันมีค่าสูงสุด 24 คอร์ของคุณถึง 100% เพียงจำไว้ว่าแบบสอบถามเดียวไม่สามารถใช้เพียง 1 เธรดในแต่ละครั้ง

มีบางอย่างที่ฟังดูแย่และไม่ได้ส่งตรงไปยังเว็บเซิร์ฟเวอร์ Apache ของคุณ คุณได้ลองใช้ปลั๊กอิน "WP Redis Cache" เพื่อแคชข้อความค้นหาของคุณใน Redis เพื่อบันทึกการค้นหาข้อความค้นหาหรือไม่

ปลั๊กอินถัดไปที่คุณสามารถลองติดตั้งได้คือ "Query Monitor" ซึ่งจะแสดงการสืบค้น SQL ที่คุณกำลังเรียกใช้ทันที ซึ่งเป็นเครื่องมือแก้ไขจุดบกพร่องที่ดีมากสำหรับ WordPress

โปรดจำไว้ว่าหากคุณกำลังพัฒนาปลั๊กอินของคุณเองใน WordPress คุณควรดูแล Redis ด้วยตัวเองโดยใช้ฟังก์ชันในตัวเพื่อแคชผลลัพธ์การค้นหาของคุณ

และในตอนท้ายของการดีบักด้วยวิธีนี้ ฉันจะแนะนำให้คุณเปิดใช้งานการสืบค้นแบบบันทึกช้าสำหรับ MySQL สำหรับทุกสิ่งที่เกิน 1 วินาที คุณอาจพบการสืบค้นที่ดัชนีสำหรับคอลัมน์ขาดหายไป

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา