Saya memiliki situasi berikut:
Sekitar 5 kali seminggu (tidak terkait dengan situasi tertentu seperti cache kosong, lonjakan lalu lintas) beberapa permintaan macet saat mengirim data ( show processlist
):
> SELECT `main_table`.`entity_id`, `main_table`.`level`, `main_table`.`path`, `main_table`.`position`,
> `main_table`.`is_active`, `main_table`.`is_anchor`,
> `main_table`.`name`, `url_rewrite`.`request_path` FROM
> `catalog_category_flat_store_30` AS `main_table`
> LEFT JOIN `core_url_rewrite` AS `url_rewrite` ON url_rewrite.category_id=main_table.entity_id AND
> url_rewrite.is_system=1 AND url_rewrite.product_id IS NULL AND
> url_rewrite.store_id='30' AND url_rewrite.id_path LIKE 'category/%'
> WHERE (path LIKE '1/2/%') AND (main_table.store_id = '30') AND
> (is_active = '1') AND (include_in_menu = '1') ORDER BY name ASC
kedua:
> SELECT `main_table`.`entity_id`, main_table.`name`, main_table.`path`,
> `main_table`.`is_active`, `main_table`.`is_anchor`,
> `main_table`.`manually`, `url_rewrite`.`request_path` FROM
> `catalog_category_flat_store_10` AS `main_table` LEFT JOIN
> `core_url_rewrite` AS `url_rewrite` ON
> url_rewrite.category_id=main_table.entity_id AND
> url_rewrite.is_system=1 AND url_rewrite.product_id IS NULL AND
> url_rewrite.store_id='10' AND url_rewrite.id_path LIKE 'category/%'
> WHERE (main_table.is_active = '1') AND (main_table.include_in_menu =
> '1') AND (main_table.path like '1/2/1528/1569/%') AND (`level` <= 4)
> ORDER BY `main_table`.`position` ASC
Pertanyaan ini terkait dengan menghasilkan menu navigasi. Mereka berjalan tanpa masalah dan sangat cepat sepanjang waktu.
Beberapa kali dalam sebulan beberapa pertanyaan lain macet pada data seding atau menunggu kunci tabel:
INSERT INTO `catalogsearch_result` SELECT 316598 AS `query_id`, `s`.`product_id`, MATCH (s.data_index) AGAINST ('STRING HERE' IN BOOLEAN MODE) AS `relevance` FROM `catalogsearch_fulltext` AS `s`
INNER JOIN `catalog_product_entity` AS `e` ON e.entity_id = s.product_id WHERE (s.store_id = 38) AND (MATCH (s.data_index) AGAINST ('STRING HERE' IN BOOLEAN MODE)) ON DUPLICATE KEY UPDATE `relevance` = VALUES(`relevance`)
(terkait pencarian)
Informasi tambahan:
- core_url_rewrite - Catatan 3M (30 situs web, 100k produk)
- catalog_category_flat_store_ * - 2000 catatan (penggunaan kategori datar diaktifkan)
Ini berjalan pada pengaturan menggunakan vmware pada beberapa perangkat keras besar (master mysql memiliki 8 core dialokasikan dan 64GB RAM, disk SSD pada penyimpanan SAN), mysql dioptimalkan dan dimonitor secara terus menerus. Ada beberapa masalah di masa lalu terkait dengan I / O (beberapa mengeluarkan dengan tautan antara server dan penyimpanan SAN).
Kami tidak dapat menemukan masalah karena menjalankan dengan menggunakan bare metal (tanpa virtualisasi, konfigurasi yang sama) ini tidak pernah terjadi, dalam kondisi tekanan tinggi (menjalankan skenario pengepungan + pengujian beban, tanpa cache).
Adakah yang mengalami masalah serupa?
MEMPERBARUI:
reindexSemua pencarian dipindahkan ke tabel sementara (sehingga tidak mengunci tabel utama yang digunakan oleh produksi, lalu mengganti nama tabel tmp). Jadi, proses pengindeksan ulang tidak mengganggu pengunjung yang mencari situs web. https://github.com/magendooro/magento-fulltext-reindex kudos to carco
Jawaban:
Sepertinya bug inti / regresi yang kita lihat di 1.7 di mana blok dan cache pengumpulan tidak berfungsi secara efektif untuk menu navigasi (
catalog/navigation/top.phtml
).Anda dapat menguji dengan menghapusnya, atau hanya menangkap sementara output ke file dengan
ob_start
dan menyajikannya dari file statis / memcache.Juga, perangkat keras yang Anda gunakan tidak terdengar besar dan terlihat di bawah yang ditentukan untuk ukuran toko yang Anda miliki. Mungkin ada hambatan I / O di sana juga - Penyimpanan SAN + jaringan padat = kinerja buruk.
-
Sebagai solusi kasar, Anda dapat menyesuaikan kelas blok untuk navigasi (dump
get_class($this)
)top.phtml
untuk mengidentifikasinya.Ini akan memungkinkan caching di seluruh situs, tanpa caching level kategori yang dipanggil oleh versi baru. Layak juga menghapus
is_active
kelas dari renderer pohon jika Anda melakukan ini untuk menghindari item menu acak yang muncul dipilih (dan mengimplementasikan alternatif JS sebagai gantinya).sumber
Ganti fungsi di
app / code / core / Mage / Katalog / Helper / Kategori / Url / Rewrite.php:
sumber
Dalam kasus kami, ini mengarah ke permintaan lambat ini:
dari app / code / core / Mage / Sitemap / Model / Sumber Daya / Katalog / Product.php .
Itu hang karena pernyataan category_id IS NULL . MySQL karena alasan tertentu tidak menggunakan indeks.
Menghapus category_id IS NULL dan mengatur id_path REGEXP '^ product / [0-9] + $' memperbaiki masalah.
Salin aplikasi / kode / inti / Penyihir / Katalog / Pembantu / Produk / Url / Rewrite.php ke aplikasi / kode / lokal / Penyihir / Katalog / Pembantu / Produk / Url / Rewrite.php dan tambahkan fungsi ini:
Kemudian salin aplikasi / kode / inti / Penyihir / Peta Situs / Model / Sumber Daya / Katalog / Product.php ke aplikasi / kode / lokal / Penyihir / Peta Situs / Model / Sumber Daya / Katalog / Product.php dan ubah baris 72 ke:
Awalnya diambil dari https://www.goivvy.com/blog/solved-magento-stuck-generating-google-sitemap-large-website
sumber