我的 Laravel 5.7 网站遇到了一些我认为彼此相关的问题(但发生在不同的时间):
PDO::prepare(): MySQL server has gone away E_WARNING: Error while sending STMT_PREPARE packet. PID=10 PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry (我的数据库似乎经常尝试在同一秒内两次写入相同的记录。我一直无法弄清楚为什么或如何重现它;它似乎与用户行为无关。)max_allowed_packet=300M (而不是 4M 的 default),但在我的网站有超过几个访问者的日子里,仍然经常遇到这些异常。innodb_buffer_pool_chunk_size=218M
innodb_buffer_pool_size = 218M
artisan queue:work --sleep=3 --tries=3 --daemon )。 mysqlslap查询(虽然我完全是新手)并且即使在模拟数百个并发客户端时也没有发现任何缓慢的问题。 SHOW VARIABLES; 的结果和 SHOW GLOBAL STATUS; are here . my.cnf是:[mysql]
[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
character-set-server=utf8
innodb_buffer_pool_chunk_size=218M
innodb_buffer_pool_size = 218M
max_allowed_packet=300M
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow_query_log.log
long_query_time = 10
log_queries_not_using_indexes = 0
关于我应该探索什么来诊断和解决这些问题的任何想法?谢谢。
最佳答案
Re Slowlog:向我们展示你的 my.cnf。 [mysqld]中的变化部分?通过 SELECT SLEEP(12); 进行测试,然后查看文件和表格。
查找查询的替代方法:由于查询需要几分钟,请执行 SHOW FULL PROCESSLIST;当您认为它可能正在运行时。
你有多少内存?没有max_allowed_packet=300M除非你有至少 30GB 的内存。否则你就有交换(甚至崩溃)的风险。将该设置保持在 RAM 的 1% 以下。
如需进一步分析可调参数,请提供 (1) RAM 大小,(2) SHOW VARIABLES;和 (3) SHOW GLOBAL STATUS; .
回复 deleted_at :您提供的链接以“列已删除的_at 不是一个好的索引候选者”开头。你误解了它。说的是单列INDEX(deleted_at) .我建议使用复合指数,例如 INDEX(contact_id, job_class_name, execute_at, deleted_at) .
对小表进行简单查询需要 158 秒?可能还有很多其他事情正在发生。获取 PROCESSLIST .
重新分离索引与复合索引:考虑两个索引:INDEX(last_name)和 INDEX(first_name) .你翻阅last_name索引找到“James”,那你能做什么?翻阅“Rick”的其他索引不会帮助您找到我。
变量和全局状态分析
观察:
( innodb_buffer_pool_size / _ram ) = 10M / 1024M = 0.98% -- 用于 InnoDB buffer_pool 的 RAM 百分比( innodb_buffer_pool_size ) = 10M -- InnoDB 数据 + 索引缓存( innodb_lru_scan_depth ) = 1,024-- "InnoDB: page_cleaner: 1000ms 预期循环花费..."可以通过降低 lru_scan_depth 来修复( Innodb_buffer_pool_pages_free / Innodb_buffer_pool_pages_total ) = 375 / 638 = 58.8% -- 当前未使用的 buffer_pool 的百分比( Innodb_buffer_pool_bytes_data / innodb_buffer_pool_size ) = 4M / 10M = 40.0% -- 数据占用缓冲池的百分比( innodb_log_buffer_size / _ram ) = 16M / 1024M = 1.6% -- 用于缓冲 InnoDB 日志写入的 RAM 百分比。( innodb_log_file_size * innodb_log_files_in_group / innodb_buffer_pool_size ) = 48M * 2 / 10M = 960.0% -- 日志大小与 buffer_pool 大小的比率。建议使用 50%,但请参阅其他计算以了解它是否重要。( innodb_flush_method ) = innodb_flush_method = -- InnoDB 应该如何要求操作系统写入块。建议使用 O_DIRECT 或 O_ALL_DIRECT (Percona) 以避免双缓冲。 (至少对于 Unix。)请参阅 chrischandler 有关 O_ALL_DIRECT 的警告( innodb_flush_neighbors ) = 1 -- 将块写入磁盘时的小优化。( innodb_io_capacity ) = 200 - 每秒能够在磁盘上执行的 I/O 操作数。 100 用于慢速驱动器; 200 用于旋转驱动器; SSD 1000-2000;乘以 RAID 系数。( innodb_print_all_deadlocks ) = innodb_print_all_deadlocks = OFF -- 是否记录所有死锁。( min( tmp_table_size, max_heap_table_size ) / _ram ) = min( 16M, 16M ) / 1024M = 1.6% -- 当需要 MEMORY 表(每个表)或 SELECT 中的临时表(每个临时表每个 SELECT)时分配的 RAM 百分比。太高可能会导致交换。( net_buffer_length / max_allowed_packet ) = 16,384 / 16M = 0.10%( local_infile ) = local_infile = ON-- local_infile = ON 是一个潜在的安全问题( Select_scan / Com_select ) = 111,324 / 264144 = 42.1% -- % 的选择进行全表扫描。 (可能会被存储的例程所迷惑。)( long_query_time ) = 10 -- 定义“慢”查询的截止(秒)。( Max_used_connections / max_connections ) = 152 / 151 = 100.7% -- 峰值连接百分比( Innodb_pages_read + Innodb_pages_written ) / Uptime = 0.186
Created_tmp_files = 0.015 /HR
Handler_write = 0.21 /sec
Innodb_buffer_pool_bytes_data = 3 /sec
Innodb_buffer_pool_pages_data = 256
Innodb_buffer_pool_pages_total = 638
Key_reads+Key_writes + Innodb_pages_read+Innodb_pages_written+Innodb_dblwr_writes+Innodb_buffer_pool_pages_flushed = 0.25 /sec
Table_locks_immediate = 2.8 /HR
Table_open_cache_hits = 0.44 /sec
innodb_buffer_pool_chunk_size = 5MB
Com_create_db = 0.41 /HR
Com_drop_db = 0.41 /HR
Connection_errors_peer_address = 2
Performance_schema_file_instances_lost = 9
Ssl_default_timeout = 500
ft_boolean_syntax = + -><()~*:&
have_ssl = YES
have_symlink = DISABLED
innodb_fast_shutdown = 1
optimizer_trace = enabled=off,one_line=off
optimizer_trace_features = greedy_search=on, range_optimizer=on, dynamic_range=on, repeated_subselect=on
session_track_system_variables = time_zone, autocommit, character_set_client, character_set_results, character_set_connection
slave_rows_search_algorithms = TABLE_SCAN,INDEX_SCAN
关于mysql - E_WARNING : Error while sending STMT_PREPARE packet. PID=*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53469793/
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin
我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi
我正在尝试绕过rails配置这个极其复杂的迷宫。到目前为止,我设法在ubuntu上设置了rvm(出于某种原因,ruby在ubuntu存储库中已经过时了)。我设法建立了一个Rails项目。我希望我的测试项目使用mysql而不是mysqlite。当我尝试“rakedb:migrate”时,出现错误:“!!!缺少mysql2gem。将其添加到您的Gemfile:gem'mysql2'”当我尝试“geminstallmysql”时,出现错误,告诉我需要为安装命令提供参数。但是,参数列表很大,我不知道该选择哪些。如何通过在ubuntu上运行的rvm和mysql获取rails3?谢谢。
在Textmate中使用ctrl+shift+d快捷方式重复行时,出现以下错误:“ruby:警告:指定了-K;这是为了1.8兼容性,可能会导致奇怪的行为” 最佳答案 此问题不仅限于重复行,还可能出现在其他使用ruby的地方。我通过将Preferences...>Advanced>ShellVariables中的PATH更改为/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin来解决它:/usr/bin:/bin:/usr/sbin:/sbin此更改后,Tex
目录1、yum安装mysql修改密码(1)在mysql里面修改(2)第二种方式,利用mysqladmin修改密码2、没有密码,登录mysql修改密码3、mysql的安全设置1、yum安装mysql在CentOS中默认安装有MariaDB(MySQL的一个分支),安装完成之后可以直接覆盖MariaDB。rpm-qa|grepmariadb查询是否安装了mariadbrpm-e--nodepsmariadb-libs-5.5.60-1.el7_5.x86_64卸载mariadwgethttp://dev.mysql.com/get/mysql57-community-release-el7-11.
当使用RyanBates的Railscasts第362集关于导出到Excel(https://github.com/railscasts/362-exporting-csv-and-excel)的示例应用程序时,我注意到Excel2010(在Windows上)在打开.xls文件时给我一条警告消息我使用“下载为Excel”链接下载的文件。警告内容如下:“您尝试打开的文件...的格式与文件扩展名指定的格式不同。打开文件前请确认文件未损坏且来源可靠。是否要打开现在存档吗?”当我单击"is"时,我可以很好地打开文件。在使用Excel2011(在Mac上)时,我什至没有收到警告消息。但我希望能够
我是Ruby的新手。我安装了DataMapper并且正在尝试安装dm-mysql-adapter-1.0.2gem。但是当我尝试安装时,出现以下错误。我正在使用ubuntu操作系统。vinoth@vinoth-laptop:~/Downloads$geminstalldm-mysql-adapter-1.0.2----with-mysql-lib=/usr/lib/mysql----with-mysql-conf=/usr/bin/mysqlWARNING:Installingto~/.gemsince/home/vinoth/gemsand/home/vinoth/gems/bina
我目前正在构建一个需要mysql2gem的RoR项目。我成功安装了gem。因为它出现在我的gem列表中。[root@vc2cmmka035538nsimple_cms]#gemlist***LOCALGEMS***actionmailer(3.2.3)actionpack(3.2.3)activemodel(3.2.3)activerecord(3.2.3)activeresource(3.2.3)activesupport(3.2.14,3.2.3)arel(3.0.2)bigdecimal(1.1.0)builder(3.2.2,3.0.0)bundler(1.1.5)c2c_li
为了停止Sidekiq,我需要使用:$bundleexecsidekiqctlstop/Users/me/Documents/sites/some_site/tmp/pid/sidekiq.pid20我告诉Sidekiq在config.yml文件中创建一个pid文件:#/Users/me/Documents/sites/some_site/config.yml:pidfile:/Users/me/Documents/sites/some_site/tmp/pids/sidekiq.pid:concurrency:25并告诉Sidekiq这个配置文件在哪里使用:$bundleexecsi