我是 MySQL 新手,我想知道:
如何utf-8
像在 Navicat 中那样创建带有字符集的数据库?
create mydatabase;
...似乎正在使用某种默认字符集。
我是 Postgres 的新手,正在尝试迁移我们的 MySQL 数据库。在 MySQL 中,我可以授予低权限用户的SELECT
、UPDATE
、INSERT
和DELETE
权限,并使这些授予适用于指定数据库中的所有表。我必须在 Postgres 中遗漏一些东西,因为看起来我必须一次为每个表授予这些权限。有许多数据库和每个数据库数百个表,这似乎是一项艰巨的任务,只是为了起步。此外,一旦数据库开始运行,添加表的频率就会很高,除非绝对必要,否则我不希望每次都授予权限。
这如何最好地完成?
如何让 PostgreSQL 中的用户帐户能够创建和删除数据库?有没有办法做到这一点GRANT
?
我有一个繁忙的数据库,只有大约 5GB 的 InnoDB 表。该数据库在使用 SSD 磁盘的 Debian 服务器上运行,我设置了最大连接数 = 800,这有时会使服务器饱和并停止运行。平均每秒查询量约为 2.5K。所以我需要优化内存使用,为尽可能多的连接腾出空间。
我已经看到建议 innodb_buffer_pool_size 应该达到总内存的 %80。另一方面,我从 Tuning-primer 脚本中收到此警告:
Max Memory Ever Allocated : 91.97 G
Configured Max Per-thread Buffers : 72.02 G
Configured Max Global Buffers : 19.86 G
Configured Max Memory Limit : 91.88 G
Physical Memory : 94.58 G
这是我当前的 innodb 变量:
| innodb_adaptive_flushing | ON |
| innodb_adaptive_hash_index | ON |
| innodb_additional_mem_pool_size | 20971520 |
| innodb_autoextend_increment | 8 |
| innodb_autoinc_lock_mode | 1 |
| innodb_buffer_pool_instances | 1 |
| innodb_buffer_pool_size | 20971520000 |
| innodb_change_buffering | all |
| innodb_checksums | ON |
| innodb_commit_concurrency | 0 |
| innodb_concurrency_tickets | 500 |
| innodb_data_file_path | ibdata1:10M:autoextend |
| innodb_data_home_dir | |
| innodb_doublewrite | ON |
| innodb_fast_shutdown | 1 |
| innodb_file_format | Antelope |
| innodb_file_format_check | ON |
| innodb_file_format_max | Antelope |
| innodb_file_per_table | ON |
| innodb_flush_log_at_trx_commit | 2 |
| innodb_flush_method | O_DIRECT |
| innodb_force_load_corrupted | OFF |
| innodb_force_recovery | 0 |
| innodb_io_capacity | 200 |
| innodb_large_prefix | OFF |
| innodb_lock_wait_timeout | 50 |
| innodb_locks_unsafe_for_binlog | OFF |
| innodb_log_buffer_size | 4194304 |
| innodb_log_file_size | 524288000 |
| innodb_log_files_in_group | 2 |
| innodb_log_group_home_dir | ./ |
| innodb_max_dirty_pages_pct | 75 |
| innodb_max_purge_lag | 0 |
| innodb_mirrored_log_groups | 1 |
| innodb_old_blocks_pct | 37 |
| innodb_old_blocks_time | 0 |
| innodb_open_files | 300 |
| innodb_purge_batch_size | 20 |
| innodb_purge_threads | 0 |
| innodb_random_read_ahead | OFF |
| innodb_read_ahead_threshold | 56 |
| innodb_read_io_threads | 4 |
| innodb_replication_delay | 0 |
| innodb_rollback_on_timeout | OFF |
| innodb_rollback_segments | 128 |
| innodb_spin_wait_delay | 6 |
| innodb_stats_method | nulls_equal |
| innodb_stats_on_metadata | ON |
| innodb_stats_sample_pages | 8 |
| innodb_strict_mode | OFF |
| innodb_support_xa | ON |
| innodb_sync_spin_loops | 30 |
| innodb_table_locks | ON |
| innodb_thread_concurrency | 4 |
| innodb_thread_sleep_delay | 10000 |
| innodb_use_native_aio | ON |
| innodb_use_sys_malloc | ON |
| innodb_version | 1.1.8 |
| innodb_write_io_threads | 4 |
一个可能相关的旁注:我看到当我尝试从 Drupal(位于单独的 Web 服务器上)插入一个大帖子(比如超过 10KB)到数据库时,它会永远持续并且页面不会正确返回。
关于这些,我想知道我的 innodb_buffer_pool_size 应该是什么以获得最佳性能。感谢您为这种情况设置最佳参数和其他参数的建议。
公用表表达式 (CTE) 和临时表有什么区别?我什么时候应该使用其中一个?
CTE
WITH cte (Column1, Column2, Column3)
AS
(
SELECT Column1, Column2, Column3
FROM SomeTable
)
SELECT * FROM cte
温度表
SELECT Column1, Column2, Column3
INTO #tmpTable
FROM SomeTable
SELECT * FROM #tmpTable
我需要从 PostgreSQL 数据库集群中删除一个数据库。即使有活动连接,我该怎么做?我需要一个-force
标志,它将删除所有连接,然后是数据库。
我该如何实施?
我dropdb
目前正在使用,但其他工具是可能的。
在为我之前提出的另一个问题创建测试数据库时,我记得可以声明主键NONCLUSTERED
什么时候使用NONCLUSTERED
主键而不是CLUSTERED
主键?
提前致谢
我正在进行数据库服务器迁移,但我不知道(在此处进行谷歌搜索和搜索之后)如何使用psql
命令行工具列出 PostgreSQL 上的数据库权限(或服务器上的所有权限)?
我在 Ubuntu 11.04 上,我的 PostgreSQL 版本是 8.2.x。
当我希望一列具有不同的值时,我可以使用约束
create table t1(
id int primary key,
code varchar(10) unique NULL
);
go
或者我可以使用唯一索引
create table t2(
id int primary key,
code varchar(10) NULL
);
go
create unique index I_t2 on t2(code);
具有唯一约束的列似乎是唯一索引的良好候选者。
是否有任何已知的理由使用唯一约束而不是使用唯一索引?
我有一个 symfony 应用程序,其 InnoDB 数据库约为 2GB,有 57 个表。数据库的大部分大小位于单个表中(~1.2GB)。我目前正在使用 mysqldump 每晚备份数据库。
由于我的 comcast 连接,通常如果我手动运行转储,我与服务器的连接将在转储完成之前超时,导致我不得不重新运行转储。[我目前运行一个每晚执行转储的 cron,这仅适用于我手动运行的转储。]
有没有办法加快连接超时问题的转储,但也可以限制服务器被此进程占用的时间?
顺便说一句,我目前正在努力减少整个数据库的大小以解决这个问题。