Sou novo no MySQL e gostaria de saber:
Como posso criar um banco de dados com charset utf-8
como fiz no navicat?
create mydatabase;
... parece estar usando algum tipo de charset padrão.
Sou novo no Postgres e estou tentando migrar nossos bancos de dados MySQL. No MySQL, posso conceder privilégios SELECT
, UPDATE
, INSERT
e DELETE
privilégios em um usuário com poucos privilégios e permitir que essas concessões se apliquem a todas as tabelas em um banco de dados especificado. Devo estar faltando alguma coisa no Postgres porque parece que tenho que conceder esses privilégios para cada tabela, um de cada vez. Com muitos bancos de dados e centenas de tabelas por banco de dados, parece uma tarefa assustadora apenas para decolar. Além disso, quando um banco de dados está em operação, a adição de tabelas ocorre com frequência suficiente para que eu não queira conceder permissões a cada vez, a menos que seja absolutamente necessário.
Como isso é melhor realizado?
Como dou a uma conta de usuário no PostgreSQL a capacidade de criar e descartar bancos de dados? Existe uma maneira de fazer isso com GRANT
?
Eu tenho um banco de dados ocupado com apenas tabelas InnoDB que tem cerca de 5 GB de tamanho. O banco de dados é executado em um servidor Debian usando discos SSD e eu configurei conexões máximas = 800 que às vezes saturam e trituram o servidor para parar. A consulta média por segundo é de cerca de 2,5 K. Então eu preciso otimizar o uso de memória para abrir espaço para o máximo de conexões possíveis.
Eu vi sugestões de que innodb_buffer_pool_size deve ser de até %80 da memória total. Por outro lado, recebo este aviso do script 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
Aqui estão minhas variáveis innodb atuais:
| 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 |
Uma observação lateral que pode ser relevante: vejo que quando tento inserir uma postagem grande (digamos mais de 10 KB) do Drupal (que fica em um servidor da Web separado) no banco de dados, ela dura para sempre e a página não retorna corretamente.
Em relação a isso, estou querendo saber qual deve ser o meu innodb_buffer_pool_size para um desempenho ideal. Agradeço suas sugestões para definir este e outros parâmetros de forma otimizada para este cenário.
Qual é a diferença entre uma expressão de tabela comum (CTE) e uma tabela temporária? E quando devo usar um sobre o outro?
CTE
WITH cte (Column1, Column2, Column3)
AS
(
SELECT Column1, Column2, Column3
FROM SomeTable
)
SELECT * FROM cte
Tabela Temp
SELECT Column1, Column2, Column3
INTO #tmpTable
FROM SomeTable
SELECT * FROM #tmpTable
Eu preciso remover um banco de dados de um cluster de banco de dados PostgreSQL. Como posso fazer isso mesmo se houver conexões ativas? Eu preciso de uma espécie de -force
sinalizador, que derrubará todas as conexões e, em seguida, o banco de dados.
Como posso implementá-lo?
Estou usando dropdb
atualmente, mas outras ferramentas são possíveis.
Ao criar um banco de dados de teste para outra pergunta que fiz anteriormente, lembrei-me de que uma chave primária pode ser declaradaNONCLUSTERED
Quando você usaria uma NONCLUSTERED
chave primária em oposição a uma CLUSTERED
chave primária?
desde já, obrigado
Estou no meio de uma migração de servidor de banco de dados e não consigo descobrir (depois de pesquisar e pesquisar aqui) como posso listar os privilégios do banco de dados (ou todos os privilégios no servidor) no PostgreSQL usando a psql
ferramenta de linha de comando?
Estou no Ubuntu 11.04 e minha versão do PostgreSQL é 8.2.x.
Quando quero que uma coluna tenha valores distintos, posso usar uma restrição
create table t1(
id int primary key,
code varchar(10) unique NULL
);
go
ou posso usar um índice exclusivo
create table t2(
id int primary key,
code varchar(10) NULL
);
go
create unique index I_t2 on t2(code);
Colunas com restrições exclusivas parecem ser boas candidatas a índices exclusivos.
Existem razões conhecidas para usar restrições exclusivas e não usar índices exclusivos?
Eu tenho um aplicativo symfony com um banco de dados InnoDB que é ~ 2GB com 57 tabelas. A maior parte do tamanho do banco de dados reside em uma única tabela (~1,2 GB). Atualmente, estou usando o mysqldump para fazer backup do banco de dados todas as noites.
Devido à minha conexão comcast, muitas vezes, se eu estiver executando um despejo manualmente, minha conexão com o servidor atingirá o tempo limite antes que o despejo seja concluído, fazendo com que eu tenha que executá-lo novamente. [Atualmente eu executo um cron que faz o dump todas as noites, isso é apenas para dumps que eu executo manualmente.]
Existe uma maneira de acelerar os despejos para o problema de tempo limite de conexão, mas também para limitar o tempo que o servidor está ocupado com esse processo?
BTW, atualmente estou trabalhando na redução do tamanho do banco de dados geral para resolver esse problema.